He creado una aplicación que contiene la actividad de GWVectraNotifier que se llama desde otras aplicaciones para mostrar la notificación.
En el cuadro de diálogo de Notificación, habrá un botón 'mostrar' y un botón 'cerrar'.
Al hacer clic en el botón 'mostrar', se iniciará la actividad correspondiente.
Para comprobar la funcionalidad de la aplicación anterior,
Inicié la actividad de GWVectraNotifier desde la aplicación K9Mail en el activador de eventos de checkmail.
Puedo iniciar la actividad de GWVectraNotifier con éxito, pero al hacer clic en el botón 'mostrar' tendré que iniciar la actividad 'MessageList' de K9mail.Para hacerlo, escribí el siguiente código:
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);
que arroja:
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)
En realidad, no puedo entender qué permisos incluir en el archivo de manifiesto de mi aplicación Notifier para acceder a MessageList de k9Mail. Estoy pegando a continuación los permisos incluidos en el archivo de manifiesto de la aplicación 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"/>
¿Alguien puede decirme qué permiso incluir en mi aplicación? En los permisos anteriores, algunos son solo para k9mail, porque esas son las clases de permisos escritas para k9. Por lo tanto, solo podré incluir los permisos integrados de Android en los permisos dados anteriormente. Intenté hacerlo también, pero no resolvió mi problema :(
fuente
Respuestas:
Debe agregar
android:exported="true"
el archivo de manifiesto en la actividad que está intentando iniciar.Desde Android: documentación exportada :
fuente
Lo
java.lang.SecurityException
que está viendo es porque puede ingresar dos entradas que apuntan a la misma actividad. Retire el segundo y debería estar listo para comenzar.Más explicación
Puede ser declarado la actividad 2 veces en el manifiesto con diferentes propiedades, como:
y
Debes eliminar el no deseado del manifiesto.
fuente
En su archivo de manifiesto, escriba esto antes
</application >
y dime si resuelve tu problema :)
fuente
Tuve este problema con esta actividad exacta.
No puede iniciar com.fsck.k9.activity.MessageList desde una actividad externa.
Lo resolví con:
Intent LaunchK9 = getPackageManager().getLaunchIntentForPackage("com.fsck.k9");
this.startActivity(LaunchK9);
Usando http://developer.android.com/reference/android/content/pm/PackageManager.html
fuente
Me estaba encontrando con el mismo problema y quería evitar agregar el filtro de intención como lo describió. Después de investigar un poco, encontré un atributo xml android: exported que debe agregar a la actividad a la que le gustaría ser llamado.
De forma predeterminada, se establece en falso si no se agregó un filtro de intención a su actividad, pero si tiene un filtro de intención, se establece en verdadero.
aquí está la documentación http://developer.android.com/guide/topics/manifest/activity-element.html#exported
tl; dr: agregue
android:exported="true"
a su actividad en su archivo AndroidManifest.xml y evite agregar el filtro de intención :)fuente
Asegúrese de que el componente tenga el indicador "exportado" establecido en verdadero. Además, el componente que define el permiso debe instalarse antes que el componente que lo usa.
fuente
Es fácil, tal vez tenga un error en la configuración.
Por ejemplo: Manifest.xml
Pero en mi configuración tengo por defecto Activity .Splash
necesita verificar esta configuración y el archivo Manifest.xml
Buena suerte
fuente
target sdk
Resolví esta excepción cambiando la versión de la versión 19 en adelante kitkatAndroidManifest.xml.
fuente
Mi problema fue que tenía esto: En lugar de esto:
fuente