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

但是为什么?我需要通过发送意向完全授予此权限。我做错了什么?我使用了来自互联网的建议takePersistableUriPermissiongrantUriPermission的很多电话,但这些电话没有帮助

但是为什么?

因为在这种情况下没有持久性Uri权限。

我做错了什么?

首先,在你的第二个代码片段,摆脱grantUriPermission()线和takePersistableUriPermission()线,既不是必需的或将工作。

其次,Uri.fromFile(new File("/data/data/com.myapp1/shared_prefs/CookiePreferences.xml")));将无法​​正常工作,为第二应用程序没有访问此文件,并FLAG_GRANT_READ_URI_PERMISSION仅供contentUri值。

第三,SharedPreferences不支持多个进程同时访问其内容。

而是使用第二个活动所需的数据附加附加到Intent,并停止尝试在两个单独的应用程序中使用相同的SharedPreferences

+0

不,我想在第一个应用程序中授予访问权限,并在第二个应用程序中读取数据。在第一个中调用'Uri.fromFile'。我没有尝试使用SharedPrefs,我只是测试应用程序之间共享的文件,这个文件只是一个随机文件,我正在玩 – Ivan

+0

当我放置一个'content://'URI时,出现以下异常: 'java.lang.SecurityException:请求标志0x1,但只允许0x0'(这个内容提供者有'android:grantUriPermissions =“true”'btw) – Ivan

+0

@Ivan:“我得到下面的异常” - 我不认识那个错误信息,对不起。 – CommonsWare