我正在尝试用我的应用程序接受图像将它们发送到服务器。设置意图过滤器很容易,就像一个魅力。我似乎无法弄清楚的是我需要从意图中的uri检索文件路径的方式。
我通过此过滤器接收了我的活动意图
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/jpeg" />
<data android:mimeType="image/png" />
<data android:mimeType="image/gif" />
</intent-filter>
通过尝试处理uri来获取文件路径,我通过调用takePersistableUriPermission(uri,modeFlags)来获取此错误:
java.lang.SecurityException: No persistable permission grants found for UID 10098 and Uri 0 @ content://media/external/images/media/124
我使用的逻辑用于从我的应用程序内部请求具有意图的图像,但是从应用程序外部接收意图会产生错误。
对于Kitkat及以上:
final int flags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
final String[] imageColumns = {MediaStore.Images.Media.DATA};
getActivity().getContentResolver().takePersistableUriPermission(uri, flags);
String id = uri.getLastPathSegment().split(":")[1];
Cursor imageCursor = context.managedQuery(getStorageUri(), imageColumns, MediaStore.Images.Media._ID + "=" + id, null, null);
答案 0 :(得分:0)
我似乎无法弄明白的是我需要从意图中的uri中检索文件路径的方式。
uri&#34;没有&#34;文件路径。 Uri
不是文件。
通过尝试伪造uri来获取文件路径,我通过调用takePersistableUriPermission(uri,modeFlags)来获取此错误:
这意味着一旦您的流程结束,您就无法使用Uri
。
对于Kitkat及以上:
ACTION_GET_CONTENT
没有义务返回一些可以使用该代码处理的Uri
。
使用Uri
,use openInputStream()
on your ContentResolver
标识的内容。