Android - 未授予URI权限
问题描述:
我正在开发将共享一些文件的两个应用程序。 当我运行下面的意图Android - 未授予URI权限
Intent next = new Intent(Intent.ACTION_VIEW,
Uri.fromFile(new File("/data/data/com.myapp1/shared_prefs/CookiePreferences.xml")));
next.setClassName("com.myapp2", "com.myapp2.SomeActivity");
next.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(next);
而在第二个收件人应用验证码:
Uri uri = intent.getData();
grantUriPermission(getPackageName(), uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
InputStream s = getContentResolver().openInputStream(uri);
我得到以下异常:
java.lang.SecurityException异常:无权限授予代理发现UID 10242 和URI 文件:///data/data/com.myapp1/shared_prefs/CookiePreferences.xml
但是为什么?我需要通过发送意向完全授予此权限。我做错了什么?我使用了来自互联网的建议takePersistableUriPermission
和grantUriPermission
的很多电话,但这些电话没有帮助
答
但是为什么?
因为在这种情况下没有持久性Uri
权限。
我做错了什么?
首先,在你的第二个代码片段,摆脱grantUriPermission()
线和takePersistableUriPermission()
线,既不是必需的或将工作。
其次,Uri.fromFile(new File("/data/data/com.myapp1/shared_prefs/CookiePreferences.xml")));
将无法正常工作,为第二应用程序没有访问此文件,并FLAG_GRANT_READ_URI_PERMISSION
仅供content
Uri
值。
第三,SharedPreferences
不支持多个进程同时访问其内容。
而是使用第二个活动所需的数据附加附加到Intent
,并停止尝试在两个单独的应用程序中使用相同的SharedPreferences
。
不,我想在第一个应用程序中授予访问权限,并在第二个应用程序中读取数据。在第一个中调用'Uri.fromFile'。我没有尝试使用SharedPrefs,我只是测试应用程序之间共享的文件,这个文件只是一个随机文件,我正在玩 – Ivan
当我放置一个'content://'URI时,出现以下异常: 'java.lang.SecurityException:请求标志0x1,但只允许0x0'(这个内容提供者有'android:grantUriPermissions =“true”'btw) – Ivan
@Ivan:“我得到下面的异常” - 我不认识那个错误信息,对不起。 – CommonsWare