java.lang.SecurityException -Не разрешено запускать намерение активности { flg=0x4000000 cmp=[MY_ACTIVITY] (имеет дополнительные возможности) }

#android #android-intent #android-securityexception

#Android #android-намерение #android-securityexception

Вопрос:

При запуске моей деятельности я получаю следующее исключение.

 java.lang.SecurityException-Not allowed to start activity Intent { flg=0x4000000 cmp=[MY_ACTIVITY] (has extras)}-
[android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1696),
android.app.Instrumentation.execStartActivity(Instrumentation.java:1488),
android.app.Activity.startActivityForResult(Activity.java:3401),
android.app.Activity.startActivityForResult(Activity.java:3357),
android.app.Activity.startActivity(Activity.java:3597),
android.app.Activity.startActivity(Activity.java:3565), ...]
  

Код довольно прямолинейный.
Создаем намерение, убеждаемся с помощью getPackageManager().queryIntentActivities, что есть действие, отфильтрованное этим намерением, и выполняем startActivity (намерение)
Есть идеи?

Комментарии:

1. Пожалуйста, опубликуйте полную трассировку стека и некоторый код того, что вы пытаетесь сделать.

2. у вас есть обновления по вашей проблеме? есть что-нибудь о том, как это исправить? Время от времени мы получаем похожие отчеты о сбоях.

3. @RicardoBelchior Привет, нет, эта проблема больше не возникает. В основном это происходило, когда в моем приложении был сторонний sdk, который раньше запускался в другом процессе. Это было что-то на их стороне, из-за чего мое приложение выдавало эти ошибки. Извините, это не сильно помогает.

4. такая же проблема, не удается распознать основную причину

Ответ №1:

Смотрите исходный код. Мы можем обнаружить, что основной причиной исключения является ActivityManager.START_PERMISSION_DENIED :

             case ActivityManager.START_PERMISSION_DENIED:
            throw new SecurityException("Not allowed to start activity "
                      intent);
  

Итак, когда другой процесс хочет выполнить какой-либо компонент в вашем приложении, доступ к которому возможен только внутри, это вызовет это исключение. Другими словами, у вызывающего процесса нет разрешения, объявленного в android:permission атрибуте вашего компонента, или для android:exported атрибута установлено значение false.