Android - 未授予URI权限

时间:2017-08-09 15:35:12

标签: android security

我正在开发两个将共享一些文件的应用程序。 当我运行以下意图时

    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

但为什么呢?我需要通过发送意图来准确授予此权限。我做错了什么?我使用来自互联网的建议拨打了很多电话,例如takePersistableUriPermissiongrantUriPermission,但这些电话没有帮助

1 个答案:

答案 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