我正在开发两个将共享一些文件的应用程序。 当我运行以下意图时
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的权限授权 和尤里 文件:///data/data/com.myapp1/shared_prefs/CookiePreferences.xml
但为什么呢?我需要通过发送意图来准确授予此权限。我做错了什么?我使用来自互联网的建议拨打了很多电话,例如takePersistableUriPermission
和grantUriPermission
,但这些电话没有帮助
答案 0 :(得分:1)
但为什么?
因为在这种情况下没有可持久的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
。