Я читал о декларации разрешений в действии .Согласно документации
Вы можете использовать тег манифеста для управления тем, какие приложения могут запускать определенное действие.Родительское действие не может запустить дочернее действие, если оба действия не имеют одинаковые разрешения в своем манифесте.Если вы объявляете элемент для определенного действия, вызывающее действие должно иметь соответствующий элемент.
Чтобы попробовать это, я создал 2 примера Приложения.Первое приложение попытается напрямую запустить действие второго приложения, используя явное намерение . Второе приложение также объявит разрешение на конкретное действие, которое я запускаю из первого приложения.
Это шаги, за которыми я следовал
- Создано 2 приложения (скажем, отправитель и получатель)
- Добавлено разрешение
<uses-permission android:name="permission.SHARE_POST"/>
в Manifest
отправителя Теперь, нажав кнопку приложения Отправитель, я вызываю Активность получателей с именем ShareActivity
следующим образом
Intent intent = new Intent();
intent.setComponent(new ComponentName("basics.android.com.androidbasics","basics.android.com.androidbasics.ShareActivity"));
startActivity(intent);
ПРИМЕЧАНИЕ: basics.android.com.androidbasics
- это имя пакетаприемник
Ниже приведено объявление активности в манифесте второго приложения (получателя)
<activity
android:name=".ShareActivity"
android:exported="true"
android:permission="permission.SHARE_POST"/>
Теперь, когда я запускаю обаприложения и попытаться отправить ShareActivity
от отправителя, я получаю следующую ошибку
Caused by: java.lang.SecurityException: Permission Denial: starting Intent { cmp=basics.android.com.androidbasics/.ShareActivity } from ProcessRecord{e09a1fc 26267:sender.android.com.sender/u0a925} (pid=26267, uid=10925) requires permission.SHARE_POST
Похоже, что отправитель еще не имеет разрешения permission.SHARE_POST
.Но я уже заявил об этом в декларации отправителя.Что тут происходит?