Я создал приложение, содержащее действие GWVectraNotifier, которое вызывается из других приложений для отображения уведомлений.
В диалоговом окне уведомлений будут кнопки «показать» и «закрыть».
При нажатии кнопки «показать» будет запущено соответствующее действие.
Чтобы проверить функциональность вышеуказанного приложения,
Я запустил действие GWVectraNotifier из приложения K9Mail при запуске события checkmail.
Я могу успешно запустить действие GWVectraNotifier, но при нажатии кнопки «показать» мне нужно будет запустить действие «Список сообщений» K9mail. Для этого я написал следующий код:
Intent i = new Intent();
i.setComponent(new ComponentName("com.fsck.k9", "com.fsck.k9.activity.MessageList"));
i.putExtra("account", accUuid);
i.putExtra("folder", accFolder);
startActivity(i);
который бросает:
WARN/ActivityManager(59): Permission denied: checkComponentPermission() reqUid=10050
WARN/ActivityManager(59): Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675): java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.fsck.k9/.activity.MessageList (has extras) } from ProcessRecord{43f6d7c8 675:com.i10n.notifier/10052} (pid=675, uid=10052) requires null
WARN/System.err(675): at android.os.Parcel.readException(Parcel.java:1247)
WARN/System.err(675): at android.os.Parcel.readException(Parcel.java:1235)
WARN/System.err(675): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1298)
WARN/System.err(675): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
WARN/System.err(675): at android.app.Activity.startActivityForResult(Activity.java:2817)
WARN/System.err(675): at android.app.Activity.startActivity(Activity.java:2923)
WARN/System.err(675): at com.i10n.notifier.GWVectraNotifier$2$1.run(GWVectraNotifier.java:63)
WARN/System.err(675): at android.app.Activity.runOnUiThread(Activity.java:3707)
WARN/System.err(675): at com.i10n.notifier.GWVectraNotifier$2.onClick(GWVectraNotifier.java:53)
WARN/System.err(675): at android.view.View.performClick(View.java:2408)
WARN/System.err(675): at android.view.View$PerformClick.run(View.java:8816)
WARN/System.err(675): at android.os.Handler.handleCallback(Handler.java:587)
WARN/System.err(675): at android.os.Handler.dispatchMessage(Handler.java:92)
WARN/System.err(675): at android.os.Looper.loop(Looper.java:123)
WARN/System.err(675): at android.app.ActivityThread.main(ActivityThread.java:4627)
WARN/System.err(675): at java.lang.reflect.Method.invokeNative(Native Method)
WARN/System.err(675): at java.lang.reflect.Method.invoke(Method.java:521)
WARN/System.err(675): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
WARN/System.err(675): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
WARN/System.err(675): at dalvik.system.NativeStart.main(Native Method)
На самом деле я не могу понять, какие разрешения включить в файл манифеста моего приложения-уведомителя для доступа к списку сообщений k9Mail. Я вставляю ниже разрешения, включенные в файл манифеста приложения k9mail:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
<uses-permission android:name="android.permission.READ_OWNER_DATA"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="org.thialfihar.android.apg.permission.READ_KEY_DETAILS"/>
<permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"
android:label="@string/read_attachment_label"
android:description="@string/read_attachment_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_ATTACHMENT"/>
<permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="dangerous"
android:label="@string/remote_control_label"
android:description="@string/remote_control_desc"/>
<uses-permission android:name="com.fsck.k9.permission.REMOTE_CONTROL"/>
<permission android:name="com.fsck.k9.permission.READ_MESSAGES"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="normal"
android:label="@string/read_messages_label"
android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.READ_MESSAGES"/>
<permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"
android:permissionGroup="android.permission-group.MESSAGES"
android:protectionLevel="normal"
android:label="@string/delete_messages_label"
android:description="@string/read_messages_desc"/>
<uses-permission android:name="com.fsck.k9.permission.DELETE_MESSAGES"/>
Может ли кто-нибудь сказать мне, какое разрешение включить в мое приложение? В приведенных выше разрешениях некоторые предназначены только для k9mail, потому что это классы разрешений, написанные для k9. Итак, я смогу включить только встроенные разрешения Android в указанные выше разрешения. Я тоже попробовал, но это не решило мою проблему :(
источник
Ответы:
Вы должны добавить
android:exported="true"
файл манифеста в действие, которое вы пытаетесь запустить.Из android: экспортированная документация :
источник
java.lang.SecurityException
Вы видите, потому что вы можете ввести две записи , указывающую на ту же деятельность. Удалите второй, и все будет в порядке.Больше объяснений
Вы можете объявлять действие 2 раза в манифесте с разными свойствами, например:
и
Вы должны удалить ненужное из манифеста
источник
В вашем файле манифеста напишите это перед
</application >
и скажите, решит ли это вашу проблему :)
источник
У меня была эта проблема именно с этой деятельностью.
Вы не можете запустить com.fsck.k9.activity.MessageList из внешнего действия.
Я решил это с помощью:
Intent LaunchK9 = getPackageManager().getLaunchIntentForPackage("com.fsck.k9");
this.startActivity(LaunchK9);
Используя http://developer.android.com/reference/android/content/pm/PackageManager.html
источник
Я столкнулся с той же проблемой и не хотел добавлять фильтр намерений, как вы описали. После некоторого покопания я обнаружил xml-атрибут android: exported, который вы должны добавить в действие, которое вы хотите вызвать.
По умолчанию для него установлено значение false, если к вашей активности не добавлен фильтр намерений, но если у вас есть фильтр намерений, он получает значение true.
вот документация http://developer.android.com/guide/topics/manifest/activity-element.html#exported
tl; dr: добавьте
android:exported="true"
к своей активности в файл AndroidManifest.xml и избегайте добавления фильтра намерений :)источник
Убедитесь, что для компонента установлен флаг «экспортирован» в значение true. Также компонент, определяющий разрешение, должен быть установлен перед компонентом, который его использует.
источник
Это просто, возможно, у вас есть ошибка в конфигурации.
Например: Manifest.xml
Но в моей конфигурации для Activity по умолчанию .Splash
вам нужно проверить эту конфигурацию и файл Manifest.xml
Удачи
источник
Я решил это исключение, изменив
target sdk
версию с 19 и более поздних версий kitkat.AndroidManifest.xml.
источник
Моя проблема заключалась в том, что у меня было это: Вместо этого:
источник