Eu criei um aplicativo que contém a atividade GWVectraNotifier que é chamado de outros aplicativos para exibir Notificação.
Na caixa de diálogo de notificação, haverá o botão 'mostrar' e o botão 'fechar'.
Ao clicar no botão 'mostrar', a atividade correspondente será iniciada.
Para verificar a funcionalidade do aplicativo acima,
Iniciei a atividade GWVectraNotifier do aplicativo K9Mail no gatilho do evento checkmail.
Consigo iniciar a atividade GWVectraNotifier com sucesso, mas ao clicar no botão 'mostrar', terei que iniciar a atividade 'MessageList' do K9mail. Para isso, escrevi o código abaixo:
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 lança:
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)
Na verdade, não consigo entender quais permissões incluir no arquivo de manifesto do meu aplicativo Notifier para acessar MessageList de k9Mail. Estou colando abaixo as permissões incluídas no arquivo de manifesto do aplicativo 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"/>
Alguém pode me dizer qual permissão incluir no meu aplicativo? Nas permissões acima, algumas são apenas para k9mail, porque essas são as classes de permissão escritas para k9. Portanto, só poderei incluir as permissões integradas do Android nas permissões fornecidas acima. Também tentei fazer isso, mas não resolveu meu problema :(
fonte
Respostas:
Você tem que adicionar
android:exported="true"
o arquivo de manifesto na atividade que está tentando iniciar.Do android: documentação exportada :
fonte
o
java.lang.SecurityException
você está vendo é porque você pode inserir duas entradas apontando para a mesma atividade. Remova o segundo e você estará pronto para ir.Mais Explicação
Você pode ser declarado a atividade 2 vezes no manifesto com propriedades diferentes, como:
e
Você deve remover o indesejado do manifesto
fonte
Em seu arquivo de manifesto, escreva isso antes
</application >
e me diga se isso resolve seu problema :)
fonte
Eu tive esse problema com essa atividade exata.
Você não pode iniciar com.fsck.k9.activity.MessageList a partir de uma atividade externa.
Resolvi com:
Intent LaunchK9 = getPackageManager().getLaunchIntentForPackage("com.fsck.k9");
this.startActivity(LaunchK9);
Usando http://developer.android.com/reference/android/content/pm/PackageManager.html
fonte
Eu estava tendo o mesmo problema e queria evitar adicionar o filtro de intent que você descreveu. Depois de pesquisar um pouco, encontrei um atributo xml android: export que você deve adicionar à atividade que gostaria de ser chamada.
Por padrão, é definido como falso se nenhum filtro de intent for adicionado à sua atividade, mas se você tiver um filtro de intent, ele será definido como verdadeiro.
aqui é a documentação http://developer.android.com/guide/topics/manifest/activity-element.html#exported
tl; dr: adicione
android:exported="true"
à sua atividade no arquivo AndroidManifest.xml e evite adicionar o filtro de intenção :)fonte
Certifique-se de que o componente tenha o sinalizador "exportado" definido como verdadeiro. Além disso, o componente que define a permissão deve ser instalado antes do componente que o usa.
fonte
É fácil talvez você tenha erro na configuração.
Por exemplo: Manifest.xml
Mas na minha configuração tenho por padrão Activity .Splash
você precisa verificar esta configuração e o arquivo Manifest.xml
Boa sorte
fonte
target sdk
Resolvi esta exceção mudando a versão do kitkat 19 em dianteAndroidManifest.xml.
fonte
Meu problema era que eu tinha isso: Em vez disso:
fonte