在Android 10上使用DownloadManager进行文件下载并将文件保存到setDestinationInExternalFilesDir()
指定的路径时遇到问题,可能是由于以下几个原因:
DownloadManager
是Android系统提供的一个服务,用于处理长时间运行的HTTP下载。它提供了一个简单的API来处理网络请求,并且能够在下载完成后通知应用。setDestinationInExternalFilesDir()
方法用于指定下载文件的保存路径,这个路径是应用的私有目录,外部应用无法访问。
适用于需要后台下载文件的应用,如新闻应用下载文章附件,或者应用更新等。
AndroidManifest.xml
中声明MANAGE_EXTERNAL_STORAGE
权限,并在运行时请求用户授权。<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
MediaStore
API来保存文件,这样可以更好地兼容分区存储。ContentValues values = new ContentValues();
values.put(MediaStore.Downloads.DISPLAY_NAME, "filename.ext");
values.put(MediaStore.Downloads.MIME_TYPE, "application/octet-stream");
values.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);
Uri uri = getContentResolver().insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, values);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("your_download_url"));
request.setDestinationUri(uri);
DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
dm.enqueue(request);
setDestinationInExternalFilesDir()
中指定的路径是有效的,并且应用有权限写入该路径。File file = new File(getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "filename.ext");
Uri destinationUri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".provider", file);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse("your_download_url"));
request.setDestinationUri(destinationUri);
DownloadManager dm = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
dm.enqueue(request);
请根据具体情况调整上述代码,并确保遵循最新的Android开发指南和政策。
领取专属 10元无门槛券
手把手带您无忧上云