当我在另一个应用程序意图上调用startIntent时,抛出SecurityException

时间:2018-06-30 23:33:00

标签: java android android-sharing

我的应用充当应用选择器,替换了默认的android共享菜单:

<intent-filter>
     <action android:name="android.intent.action.CHOOSER" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

在此活动中,我抓住意图,然后将其共享给另一个应用程序:

Intent intent = getIntent();
        Parcelable parcelable = intent.getParcelableExtra("android.intent.extra.INTENT");
Intent newIntent = (Intent) parcelable;
        shareIntent.setComponent(new ComponentName(packageName, activityName));
        startActivity(shareIntent);
        finish();

这很好,除了我共享内容URI时。然后我的应用崩溃了:

java.lang.SecurityException: UID 10628 does not have permission to content://com.android.chrome.FileProvider/images/screenshot/15303956193093126976530267588801.jpg [user 0]
        at android.os.Parcel.readException(Parcel.java:1958)
        at android.os.Parcel.readException(Parcel.java:1904)
        at android.app.IActivityManager$Stub$Proxy.startActivity(IActivityManager.java:4884)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1617)
        at android.app.Activity.startActivityForResult(Activity.java:4564)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:754)
        at android.app.Activity.startActivityForResult(Activity.java:4522)
        at androidx.fragment.app.FragmentActivity.startActivityForResult(FragmentActivity.java:741)
        at android.app.Activity.startActivity(Activity.java:4883)
        at android.app.Activity.startActivity(Activity.java:4851)

我的应用似乎没有对此URI的权限,因此由于某些原因无法执行startActivity。我该怎么做才能避免这种情况?在这种情况下,是否可以将意图发送到正常的Android Share菜单?

1 个答案:

答案 0 :(得分:0)

在致电addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION)之前先致电Intent上的startActivity()