【发布时间】:2016-04-29 12:00:52
【问题描述】:
我正在尝试使用我的应用程序接受图像以将它们发送到服务器。设置意图过滤器很简单,而且效果很好。我似乎无法弄清楚的是我需要从意图中的 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);
【问题讨论】:
-
您是否在 Android 6.0 及更高版本中遇到此错误?
-
因为你设置了 android:exported="false" 这意味着其他进程无法访问这个 Activity。因此,您将其设置为 true 并执行相同操作,它不会崩溃
-
@SanjayKakadiya no kitkat 及以上,只是经过测试确定。
-
请看这个link
-
@DaminiMehra 我已将 android:exported="true" 添加到具有上述意图过滤器但没有任何改变的活动中
标签: android android-intent securityexception