J'ai créé une application contenant l'activité GWVectraNotifier qui est appelée à partir d'autres applications pour afficher la notification.
Dans la boîte de dialogue de notification, il y aura un bouton «afficher» et un bouton «fermer».
En cliquant sur le bouton «afficher», l'activité correspondante sera lancée.
Pour vérifier la fonctionnalité de l'application ci-dessus,
J'ai démarré l'activité GWVectraNotifier à partir de l'application K9Mail sur le déclencheur d'événement checkmail.
Je suis en mesure de démarrer l'activité GWVectraNotifier avec succès, mais en cliquant sur le bouton `` Afficher '', je devrai démarrer l'activité `` MessageList '' de K9mail.Pour ce faire, j'ai écrit le code ci-dessous:
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);
qui jette:
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 fait, je ne suis pas en mesure de comprendre les autorisations à inclure dans le fichier manifeste de mon application Notifier pour accéder à MessageList de k9Mail. Je colle ci-dessous les autorisations incluses dans le fichier manifeste de l'application 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"/>
Quelqu'un peut-il me dire quelle autorisation inclure dans mon application? Dans les autorisations ci-dessus, certaines sont uniquement pour k9mail, car ce sont les classes d'autorisation écrites pour k9. Ainsi, je ne pourrai inclure les autorisations intégrées d'Android que dans les autorisations données ci-dessus. J'ai essayé de le faire aussi, mais cela n'a pas résolu mon problème :(
la source
Réponses:
Vous devez ajouter
android:exported="true"
le fichier manifeste à l'activité que vous essayez de démarrer.Depuis l' android: documentation exportée :
la source
Le que
java.lang.SecurityException
vous voyez est que vous pouvez entrer deux entrées pointant vers la même activité. Retirez le second et vous devriez être prêt à partir.Plus d'explications
Vous pouvez être déclaré l'activité 2 fois dans le manifeste avec différentes propriétés, comme:
et
Vous devez supprimer l'élément indésirable du manifeste
la source
Dans votre fichier Manifest, écrivez ceci avant
</application >
et dites-moi si cela résout votre problème :)
la source
J'ai eu ce problème avec cette activité exacte.
Vous ne pouvez pas démarrer com.fsck.k9.activity.MessageList à partir d'une activité externe.
Je l'ai résolu avec:
Intent LaunchK9 = getPackageManager().getLaunchIntentForPackage("com.fsck.k9");
this.startActivity(LaunchK9);
Utilisation de http://developer.android.com/reference/android/content/pm/PackageManager.html
la source
Je rencontrais le même problème et je voulais éviter d'ajouter le filtre d'intention comme vous l'avez décrit. Après quelques recherches, j'ai trouvé un attribut xml android: exporté que vous devriez ajouter à l'activité que vous souhaitez appeler.
Il est défini par défaut sur false si aucun filtre d'intention n'est ajouté à votre activité, mais si vous disposez d'un filtre d'intention, il est défini sur true.
voici la documentation http://developer.android.com/guide/topics/manifest/activity-element.html#exported
tl; dr: ajoutez
android:exported="true"
à votre activité dans votre fichier AndroidManifest.xml et évitez d'ajouter le filtre d'intention :)la source
Assurez-vous que l'indicateur «exporté» du composant est défini sur true. Le composant définissant l'autorisation doit également être installé avant le composant qui l'utilise.
la source
C'est facile peut-être que vous avez une erreur dans la configuration.
Par exemple: Manifest.xml
Mais dans ma configuration ont pour activité par défaut .Splash
vous devez vérifier cette configuration et le fichier Manifest.xml
Bonne chance
la source
J'ai résolu cette exception en changeant la
target sdk
version à partir de la version 19 kitkatAndroidManifest.xml.
la source
Mon problème était que j'avais ceci: au lieu de ceci:
la source