SecurityException генерируется, когда я вызываю startIntent для другого приложения - PullRequest
0 голосов
/ 01 июля 2018

Мое приложение действует как средство выбора приложений, заменяя стандартное меню общего доступа для 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 голосов
/ 01 июля 2018

Позвоните addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION|Intent.FLAG_GRANT_WRITE_URI_PERMISSION) на Intent, прежде чем звонить startActivity().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...