微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 andorid 11 中使用下载管理器和作用域存储的影响

如何解决在 andorid 11 中使用下载管理器和作用域存储的影响

我在做什么

  • 我正在尝试使用下载管理器将文件下载到设备 内部存储
  • 内部存储是指位置 /storage/emulated/0/Android/data/com.example.code/files/Download/Devrath/test.db
  • 现在我正在使用下面的模拟器是可以运行并成功下载文件代码

问题

  1. 范围存储在未来会对此产生影响吗?
  2. 或者由于下载管理器是一个系统服务,它会不会继续 工作

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.code">

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:usesCleartextTraffic="true"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Code">
        <activity android:name=".MainActivityTwo">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

gradle

compileSdkVersion 31
    buildToolsversion "30.0.3"

    defaultConfig {
        applicationId "com.example.code"
        minSdkVersion 16
        targetSdkVersion 31
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

MainActivityTwo

public class MainActivityTwo extends AppCompatActivity {

    private static final int REQUEST_CODE = 100;
    //public static final String imageURL = "http://www.tutorialspoint.com/java/java_tutorial.pdf";
    public static final String imageURL = "http://speedtest.ftp.otenet.gr/files/test10Mb.db";
    // String imageName = "java_tutorial.pdf";

    String filePath = "";
    String imageName = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        filePath = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString()
                .concat(File.separator)
                .concat("Devrath").concat(File.separator);

        imageName = "test.db";

        // storage runtime permission
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_CODE);
            }
        }

        Button btnDownloadImage = findViewById(R.id.initiateDownloadId);
        Button chkIfFileExistsId = findViewById(R.id.chkIfFileExistsId);
        btnDownloadImage.setonClickListener(v -> downloadImage(imageURL,imageName));
        chkIfFileExistsId.setonClickListener(v -> checkIfFileExists());

    }

    public void downloadImage(String url,String outputFileName) {
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
        request.setTitle(imageName);
        request.setDescription("Downloading " + imageName);
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.allowScanningByMediaScanner();
        //request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,outputFileName); // ---> Working
        //request.setDestinationInExternalFilesDir(this,Environment.getExternalStorageDirectory().toString() + File.separator,outputFileName);
        request.setDestinationInExternalFilesDir(this,filePath,outputFileName);
        DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
        manager.enqueue(request);
    }

    private void checkIfFileExists() {

        //-> /storage/emulated/0/Android/data/com.example.code/files/Download/Devrath/test.db
        File mFile = new File(filePath.concat(imageName));
        if(mFile.exists()){
            Toast.makeText(this,"File exists",Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(this,"File does not exists",Toast.LENGTH_LONG).show();
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。