Ich habe eine Anwendung erstellt, die die GWVectraNotifier-Aktivität enthält, die von anderen Anwendungen aufgerufen wird, um die Benachrichtigung anzuzeigen.
Im Dialogfeld "Benachrichtigung" werden die Schaltflächen "Anzeigen" und "Schließen" angezeigt.
Durch Klicken auf die Schaltfläche "Anzeigen" wird die entsprechende Aktivität gestartet.
Um die Funktionalität der oben genannten Anwendung zu überprüfen,
Ich habe die GWVectraNotifier-Aktivität über die K9Mail-Anwendung beim Auslösen eines Checkmail-Ereignisses gestartet.
Ich kann die GWVectraNotifier-Aktivität erfolgreich starten, aber wenn ich auf die Schaltfläche "Anzeigen" klicke, muss ich die Aktivität "MessageList" von K9mail starten. Dazu habe ich den folgenden Code geschrieben:
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);
was wirft:
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)
Eigentlich kann ich nicht verstehen, welche Berechtigungen in die Manifestdatei meiner Notifier-Anwendung aufgenommen werden sollen, um auf die MessageList von k9Mail zuzugreifen. Ich füge unten die Berechtigungen ein, die in der Manifestdatei der k9mail-Anwendung enthalten sind:
<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"/>
Kann mir jemand sagen, welche Berechtigung ich in meine App aufnehmen soll? In den obigen Berechtigungen gelten einige nur für k9mail, da dies die für k9 geschriebenen Berechtigungsklassen sind. Daher kann ich nur die integrierten Berechtigungen von Android in die oben angegebenen Berechtigungen aufnehmen. Ich habe es auch versucht, aber es hat mein Problem nicht gelöst :(
quelle
Antworten:
Sie müssen
android:exported="true"
die Manifestdatei in der Aktivität hinzufügen, die Sie starten möchten.Vom Android: Exportierte Dokumentation :
quelle
Das, was
java.lang.SecurityException
Sie sehen, ist, weil Sie zwei Einträge eingeben können, die auf dieselbe Aktivität verweisen. Entfernen Sie den zweiten und Sie sollten bereit sein zu gehen.Weitere Erklärung
Sie können die Aktivität zweimal im Manifest mit verschiedenen Eigenschaften deklariert werden, wie z.
und
Sie sollten das unerwünschte aus dem Manifest entfernen
quelle
Schreiben Sie dies zuvor in Ihre Manifest-Datei
</application >
und sag mir, ob es dein Problem löst :)
quelle
Ich hatte dieses Problem mit genau dieser Aktivität.
Sie können com.fsck.k9.activity.MessageList nicht von einer externen Aktivität aus starten.
Ich habe es gelöst mit:
Intent LaunchK9 = getPackageManager().getLaunchIntentForPackage("com.fsck.k9");
this.startActivity(LaunchK9);
Verwenden von http://developer.android.com/reference/android/content/pm/PackageManager.html
quelle
Ich hatte das gleiche Problem und wollte vermeiden, den von Ihnen beschriebenen Absichtsfilter hinzuzufügen. Nach einigem Graben fand ich ein XML-Attribut android: exportiert , das Sie zu der Aktivität hinzufügen sollten, die Sie aufrufen möchten.
Es ist standardmäßig auf false gesetzt, wenn Ihrer Aktivität kein Absichtsfilter hinzugefügt wurde. Wenn Sie jedoch einen Absichtsfilter haben, wird dieser auf true gesetzt.
Hier ist die Dokumentation http://developer.android.com/guide/topics/manifest/activity-element.html#exported
tl; dr:
android:exported="true"
Füge deiner Aktivität in deiner AndroidManifest.xml-Datei hinzu und vermeide das Hinzufügen des Intent-Filters :)quelle
Stellen Sie sicher, dass für die Komponente das Flag "exportiert" auf "true" gesetzt ist. Außerdem sollte die Komponente, die die Berechtigung definiert, vor der Komponente installiert werden, die sie verwendet.
quelle
Es ist einfach, vielleicht haben Sie Fehler in der Konfiguration.
Zum Beispiel: Manifest.xml
Aber in meiner Konfiguration haben für Standardaktivität .Splash
Sie müssen diese Konfiguration und die Datei Manifest.xml überprüfen
Viel Glück
quelle
Ich habe diese Ausnahme gelöst, indem ich die
target sdk
Version ab 19 Kitkat-Version geändert habeAndroidManifest.xml.
quelle
Mein Problem war, dass ich folgendes hatte: Stattdessen:
quelle