Подтвердить что ты не робот

Android: java.lang.SecurityException: отказ в разрешении: начать выполнение

Я создал приложение, содержащее действие GWVectraNotifier, которое вызывается из других приложений для отображения Уведомления.

В диалоговом окне "Уведомление" появится кнопка "показать" и "закрыть".

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

Чтобы проверить функциональность вышеуказанного приложения,

Я начал работу GWVectraNotifier из приложения K9Mail при запуске события checkmail.

Я могу успешно запустить действие GWVectraNotifier, но при нажатии кнопки "показать" мне нужно будет запустить "MessageList" активность 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)

На самом деле я не могу понять, какие разрешения включить в файл манифеста приложения Notifier для доступа к MessageList для 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 в указанные выше разрешения. Я тоже попытался сделать это, но это не решило мою проблему:(

4b9b3361

Ответ 1

Вы должны добавить android:exported="true" в файл манифеста в действии, которое вы пытаетесь запустить.

Из android: экспортированная документация:

Android: экспортироваться
    Независимо от того, может ли эта активность запускаться компонентами других приложений - "true", если она может быть, и "false" , если нет. Если "false" , активность может запускаться только компонентами одного приложения или приложений с одним и тем же идентификатором пользователя.

Значение по умолчанию зависит от того, содержит ли активность фильтры намерений. Отсутствие каких-либо фильтров означает, что действие может быть вызвано только путем указания его точного имени класса. Это означает, что действие предназначено только для внутреннего использования приложения (так как другие не знают имя класса). Поэтому в этом случае значением по умолчанию является "false" . С другой стороны, наличие по меньшей мере одного фильтра подразумевает, что активность предназначена для внешнего использования, поэтому значение по умолчанию "true".

Этот атрибут не единственный способ ограничить воздействие активности на другие приложения. Вы также можете использовать разрешение для ограничения внешних объектов, которые могут вызывать действие (см. Атрибут разрешений).

Ответ 2

java.lang.SecurityException, который вы видите, состоит в том, что вы можете ввести две записи, указывающие на одну и ту же активность. Удалите вторую, и вам должно быть хорошо.

Подробнее

Вы можете объявить активность 2 раза в манифесте с различными свойствами, например:

 <activity android:name=".myclass"> </activity>

и

 <activity android:name=".myclass" android:label="@string/app_name"> 
     <intent-filter> 
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
 </activity>

Вы должны удалить ненужный из манифеста

Ответ 3

В файле манифеста напишите это перед </application >

<activity android:name="com.fsck.k9.activity.MessageList">
   <intent-filter>
      <action android:name="android.intent.action.MAIN">
      </action>
   </intent-filter>
</activity>

и скажите мне, решает ли ваша проблема:)

Ответ 4

У меня была эта проблема с этой точной деятельностью.

Вы не можете запустить 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

Ответ 5

Я столкнулся с той же проблемой и хотел избежать добавления фильтра намерений, как вы описали. После некоторого копания я обнаружил атрибут xml android: exported, который вы должны добавить к активности, которую вы хотите вызвать.

По умолчанию установлено значение false, если в вашу активность не добавлен фильтр намерений, но если у вас есть фильтр намерений, он получает значение true.

вот документация http://developer.android.com/guide/topics/manifest/activity-element.html#exported

tl; dr: добавьте android:exported="true" в свою активность в файле AndroidManifest.xml и не добавляйте фильтр-замысел:)

Ответ 6

Убедитесь, что для компонента установлен флаг "экспортированный" в значение true. Также компонент, определяющий разрешение, должен быть установлен перед компонентом, который его использует.

Ответ 7

Я решил это исключение, изменив версию target sdk с 19-й версии kitkat AndroidManifest.xml.

<uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

Ответ 8

Возможно, у вас есть ошибка в конфигурации.

Пример: Manifest.xml

введите описание изображения здесь

Но в моей конфигурации есть по умолчанию Activity.Splash

введите описание изображения здесь

вам нужна проверить эту конфигурацию и файл Manifest.xml

Удача

Ответ 9

Моя проблема заключалась в том, что у меня было это: wrong Вместо этого: correct