intent.getData()
将返回一个String,如file:///storage/emulated/0/Download/some_file.ext.然而,由于Android 4.2,下载管理器通过内容方案广播和意图,例如content:// downloads / all_downloads / 2334.
如何检索下载文件的本地文件路径?
我尝试过以下操作:
public static String getRealPathFromURI(Uri contentUri,Activity activity) { DownloadManager downloadManager = (DownloadManager) activity.getSystemService(Activity.DOWNLOAD_SERVICE); String[] contentParts = contentUri.getEncodedPath().split("/"); Cursor q = downloadManager.query(new DownloadManager.Query().setFilterById(Integer.parseInt(contentParts[contentParts.length - 1]))); if (q == null) { // Download no longer exists return null; } q.moveToFirst(); return q.getString(q.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME)); }
但是游标不会返回任何行(所以q.getCount()== 0,因此最后一个return语句会引发异常).另外,通过从Uri解析下载文件ID的黑客似乎很奇怪.
更新:我也试过:
input = getActivity().getContentResolver().openInputStream(contentUri);
但这会返回错误说明
权限拒绝:阅读com.android.providers.downloads.DownloadProvider uri内容:// downloads / all_downloads / 2334 from pid = 30950,uid = 10064需要android.permission.ACCESS_ALL_DOWNLOADS或grantUriPermission()
显然,我无法通过ContentProvider访问下载(因为我的应用没有启动它们 – 浏览器).
解决方法
即使您可以获得真实的文件路径,由于文件权限,您可能无法阅读它,尽管您可能很幸运它在外部存储上.您是否尝试过将android.permission.ACCESS_ALL_DOWNLOADS添加到您的应用程序中,就像异常建议一样? That won’t work,since the permission is at signature level 版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。