android – 从捕获的DownloadManager意图中检索文件路径

前端之家收集整理的这篇文章主要介绍了android – 从捕获的DownloadManager意图中检索文件路径前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
由于 Android 4.2如果用户在浏览器中下载了一些文件,则使用DownloadManager.如果用户点击“下载完成”通知,则意图始终启动.在Android 4.2之前,意图曾经将下载的文件路径放在内容中,这样:
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访问下载(因为我的应用没有启动它们 – 浏览器).

解决方法

通过内容解析器得到它是正确的.不是每个内容网址都将成为一个文件.例如,Gallery应用程序将根据源代码将uri转换为网络调用或本地文件.

即使您可以获得真实的文件路径,由于文件权限,您可能无法阅读它,尽管您可能很幸运它在外部存储上.您是否尝试过将android.permission.ACCESS_ALL_DOWNLOADS添加到您的应用程序中,就像异常建议一样? That won’t work,since the permission is at signature level 原文链接:https://www.f2er.com/android/312898.html

猜你在找的Android相关文章