Saya telah membuat aplikasi yang berisi aktivitas GWVectraNotifier yang dipanggil dari aplikasi lain untuk menampilkan Notifikasi.
Pada dialog Notification, akan ada tombol 'show' dan 'close'.
Dengan mengklik tombol 'tampilkan', aktivitas terkait akan dimulai.
Untuk memeriksa fungsionalitas aplikasi di atas,
Saya memulai aktivitas GWVectraNotifier dari aplikasi K9Mail pada pemicu peristiwa checkmail.
Saya dapat memulai aktivitas GWVectraNotifier dengan sukses, tetapi dengan mengklik tombol 'show' saya harus memulai aktivitas 'MessageList' dari K9mail. Untuk melakukannya, saya menulis kode di bawah ini:
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);
yang melempar:
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)
Sebenarnya saya tidak dapat memahami izin apa yang harus disertakan dalam file manifes aplikasi Pemberitahu saya untuk mengakses Daftar Pesan k9Mail. Saya menempel di bawah izin yang disertakan dalam file manifes aplikasi 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"/>
Bisakah seseorang memberi tahu saya izin mana yang harus disertakan dalam aplikasi saya? Pada hak akses di atas, beberapa hanya untuk k9mail, karena itu adalah kelas izin yang ditulis untuk k9. Jadi, saya hanya akan dapat memasukkan izin bawaan android di izin yang diberikan di atas. Saya mencoba melakukannya juga, tetapi tidak menyelesaikan masalah saya :(
sumber
Jawaban:
Anda harus menambahkan
android:exported="true"
file manifes dalam aktivitas yang Anda coba mulai.Dari android: dokumentasi yang diekspor :
sumber
Itu
java.lang.SecurityException
Anda lihat adalah karena Anda mungkin memasukkan dua entri yang menunjuk ke aktivitas yang sama. Hapus yang kedua dan Anda harus pergi.Penjelasan Lebih Lanjut
Anda dapat mendeklarasikan aktivitas 2 kali dalam manifes dengan properti berbeda, seperti:
dan
Anda harus menghapus yang tidak diinginkan dari manifes
sumber
Di file Manifest Anda, tulis ini sebelumnya
</application >
dan beri tahu saya jika itu menyelesaikan masalah Anda :)
sumber
Saya punya masalah dengan aktivitas ini.
Anda tidak dapat memulai com.fsck.k9.activity.MessageList dari aktivitas eksternal.
Saya menyelesaikannya dengan:
Intent LaunchK9 = getPackageManager().getLaunchIntentForPackage("com.fsck.k9");
this.startActivity(LaunchK9);
Menggunakan http://developer.android.com/reference/android/content/pm/PackageManager.html
sumber
Saya mengalami masalah yang sama dan ingin menghindari penambahan filter maksud seperti yang Anda jelaskan. Setelah menggali beberapa kali, saya menemukan atribut xml android: diekspor yang harus Anda tambahkan ke aktivitas yang ingin Anda panggil.
Ini secara default disetel ke false jika tidak ada filter maksud yang ditambahkan ke aktivitas Anda, tetapi jika Anda memiliki filter maksud, ini akan disetel ke true.
berikut dokumentasinya http://developer.android.com/guide/topics/manifest/activity-element.html#exported
tl; dr: tambahkan
android:exported="true"
ke aktivitas Anda di file AndroidManifest.xml dan hindari menambahkan filter-maksud :)sumber
Pastikan komponen memiliki tanda "diekspor" yang disetel ke true. Juga komponen yang menentukan izin harus dipasang sebelum komponen yang menggunakannya.
sumber
Sangat mudah mungkin Anda mengalami kesalahan dalam konfigurasi.
Misalnya: Manifest.xml
Tetapi dalam konfigurasi saya memiliki Activity default .Splash
Anda perlu memeriksa konfigurasi ini dan file Manifest.xml
Semoga berhasil
sumber
Saya menyelesaikan pengecualian ini dengan mengubah
target sdk
versi dari 19 versi kitkat dan seterusnyaAndroidManifest.xml.
sumber
Masalah saya adalah saya memiliki ini: Alih-alih ini:
sumber