从动作发送的意图发送在URI上生成SecurityException

时间:2016-04-29 12:00:53

标签: android android-intent securityexception

我正在尝试用我的应用程序接受图像将它们发送到服务器。设置意图过滤器很容易,就像一个魅力。我似乎无法弄清楚的是我需要从意图中的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);

1 个答案:

答案 0 :(得分:0)

  

我似乎无法弄明白的是我需要从意图中的uri中检索文件路径的方式。

uri&#34;没有&#34;文件路径。 Uri不是文件。

  

通过尝试伪造uri来获取文件路径,我通过调用takePersistableUriPermission(uri,modeFlags)来获取此错误:

这意味着一旦您的流程结束,您就无法使用Uri

  

对于Kitkat及以上:

ACTION_GET_CONTENT没有义务返回一些可以使用该代码处理的Uri

使用Uriuse openInputStream() on your ContentResolver标识的内容。