J'ai une bibliothèque (jar) sur le chemin de génération de mon projet. Le projet accède à MainActivity dans le fichier jar, en utilisant l’intention suivante:
final Intent it = new Intent();
it.setClassName("com.example.lib", "com.example.lib.MainActivity");
startActivity(it);
Cela fonctionnait pendant un certain temps, mais a soudainement commencé à recevoir 'ActivityNotFoundException: aucune activité trouvée pour gérer l'intention' que j'ai pu résoudre. Mais maintenant, je suis coincé avec une 'Java.lang.SecurityException: Refus de permission: Intention de départ'.
J'ai essayé toutes les suggestions faites sur stackoverflow (recherchez les doublons dans le fichier manifeste; ajoutez Android: exports = "true" dans lib manifest; Eclipse> Projet> Nettoyer; ajout/modification de balises 'intent-filter'; etc.). J'ai même essayé de réécrire le manifeste du projet mais sans aller nulle part avec.
Voici la sortie logcat:
11-07 06:20:52.176: E/AndroidRuntime(4626): FATAL EXCEPTION: main
11-07 06:20:52.176: E/AndroidRuntime(4626): Java.lang.SecurityException: Permission Denial: starting Intent { cmp=com.example.lib/.MainActivity } from ProcessRecord{40dd3778 4626:com.example.project/u0a10046} (pid=4626, uid=10046) not exported from uid 10047
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.os.Parcel.readException(Parcel.Java:1425)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.os.Parcel.readException(Parcel.Java:1379)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.Java:1885)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.app.Instrumentation.execStartActivity(Instrumentation.Java:1412)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.app.Activity.startActivityForResult(Activity.Java:3370)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.app.Activity.startActivityForResult(Activity.Java:3331)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.Java:824)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.app.Activity.startActivity(Activity.Java:3566)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.app.Activity.startActivity(Activity.Java:3534)
11-07 06:20:52.176: E/AndroidRuntime(4626): at com.example.project.MainActivity.onOptionsItemSelected(MainActivity.Java:93)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.app.Activity.onMenuItemSelected(Activity.Java:2548)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.Java:366)
11-07 06:20:52.176: E/AndroidRuntime(4626): at com.Android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.Java:980)
11-07 06:20:52.176: E/AndroidRuntime(4626): at com.Android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.Java:735)
11-07 06:20:52.176: E/AndroidRuntime(4626): at com.Android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.Java:149)
11-07 06:20:52.176: E/AndroidRuntime(4626): at com.Android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.Java:874)
11-07 06:20:52.176: E/AndroidRuntime(4626): at com.Android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.Java:547)
11-07 06:20:52.176: E/AndroidRuntime(4626): at com.Android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.Java:115)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.view.View.performClick(View.Java:4204)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.view.View$PerformClick.run(View.Java:17355)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.os.Handler.handleCallback(Handler.Java:725)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.os.Handler.dispatchMessage(Handler.Java:92)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.os.Looper.loop(Looper.Java:137)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Android.app.ActivityThread.main(ActivityThread.Java:5041)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Java.lang.reflect.Method.invokeNative(Native Method)
11-07 06:20:52.176: E/AndroidRuntime(4626): at Java.lang.reflect.Method.invoke(Method.Java:511)
11-07 06:20:52.176: E/AndroidRuntime(4626): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:793)
11-07 06:20:52.176: E/AndroidRuntime(4626): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:560)
11-07 06:20:52.176: E/AndroidRuntime(4626): at dalvik.system.NativeStart.main(Native Method)
Manifest XML du projet:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.project"
Android:versionCode="4"
Android:versionName="4.0" >
<!-- Permissions -->
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.INTERNET" />
<supports-screens Android:anyDensity="true" />
<!-- SDK Settings -->
<uses-sdk
Android:minSdkVersion="11"
Android:targetSdkVersion="18" />
<!-- APP Start -->
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<!-- App Activity -->
<activity
Android:name="com.example.project.MainActivity"
Android:label="@string/app_name"
Android:screenOrientation="portrait" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Library Activity -->
<activity Android:name="com.example.lib.MainActivity" Android:label="LibMain">
<intent-filter>
<action Android:name="Android.intent.action.MAIN"></action>
</intent-filter>
</activity>
</application>
<!-- END - APP -->
</manifest>
Qu'est-ce que je néglige? Aucune suggestion?
MODIFIER
J'ai mis à jour le fichier manifest.xml avec toutes les autres activités et cela a résolu le problème. L'activité d'intention démarre sans erreur. MAIS, ce n'est que sur AVD. Sur le périphérique actuel, il génère toujours la même erreur. J'ai complètement désinstallé l'application de l'appareil et réinstallé la même erreur.
L'exception est claire. Vous devez définir Android:exported="true"
dans votre fichier AndroidManifest.xml
dans lequel vous déclarez cette Activity
.
Modifier
<activity
Android:name="com.example.lib.MainActivity"
Android:label="LibMain"
Android:exported="true">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" >
</action>
</intent-filter>
</activity>
J'ai donc rencontré ce problème récemment. Le problème était dans la configuration de construction/exécution. Apparemment, le studio Android avait choisi une activité dans mon projet comme activité de lancement, ignorant ainsi mon choix dans le fichier manifeste.
Cliquez sur le nom du module juste à gauche du bouton Exécuter et cliquez sur "Modifier les configurations ...". Assurez-vous maintenant que "Lancer l'activité par défaut" est sélectionné.
La chose amusante quand j'ai eu cette erreur était que je pouvais toujours lancer l'application avec l'appareil et ça commence par l'activité préférée. Mais lancer à partir de IDE semblait impossible.
Sélectionnez votre configuration appropriée pour lancer l'application.
Dans mon cas, j'ai trouvé l'erreur suivante:
Je venais de changer comme:
Peut aider à quelqu'un, merci :)
Ajoutez Android: exports = "true" dans votre balise d'activité 'com.example.lib.MainActivity'.
Depuis Android: documentation exportée,
Android: exporté Si l'activité peut ou non être lancée par des composants d'autres applications - "true" si elle peut l'être et "false" sinon. Si "false", l'activité ne peut être lancée que par des composants de la même application ou des applications avec le même ID utilisateur.
Depuis votre sortie logcat, il est clair que le problème est dû à une non-concordance dans uid. Donc, l'ajout d'Android: exports = "true" devrait faire l'affaire.
Semblable à la réponse de Olayinka à propos du fichier de configuration pour ADT: Je viens d'avoir le même problème sur IntelliJ's IdeaU v14.
Je travaille sur un didacticiel qui m'a amené à changer l'activité de départ de MyActivity
à MyListActivity
(qui est une liste de MyActivity
). J'ai commencé à obtenir des autorisations interdites.
Après beaucoup d’essais, de labeur et de douleur: Dans .idea\workspace.xml:
...
<configuration default="false" name="MyApp" type="AndroidRunConfigurationType" factoryName="Android Application">
<module name="MyApp" />
<option name="ACTIVITY_CLASS" value="com.domain.MyApp.MyActivity" />
...
</configuration>
...
J'ai changé la variable MyActivity
en MyListActivity
, j'ai rechargé le projet et je recommence à nouveau.
Vous ne savez pas quel IDE vous utilisez, mais peut-être que votre IDE annule ou force une activité de démarrage spécifique?
Si vous essayez de tester votre application codée dans Android Studio via votre téléphone Android, c'est généralement le problème de votre téléphone. Il suffit de décocher toutes les options de débogage USB et de basculer les options de développeur sur OFF. Puis redémarrez votre téléphone et activez le développeur et le débogage USB. Vous êtes prêt à partir!
Dans mon cas, cette erreur était due à des chemins incorrects utilisés pour spécifier les intentions dans mon fichier xml de préférences après avoir renommé le projet. Par exemple, où j'ai eu:
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
<Preference
Android:key="pref_edit_recipe_key"
Android:title="Add/Edit Recipe">
<intent
Android:action="Android.intent.action.VIEW"
Android:targetPackage="com.ssimon.olddirectory"
Android:targetClass="com.ssimon.olddirectory.RecipeEditActivity"/>
</Preference>
</PreferenceScreen>
J'avais besoin des éléments suivants à la place:
<PreferenceScreen xmlns:Android="http://schemas.Android.com/apk/res/Android">
<Preference
Android:key="pref_edit_recipe_key"
Android:title="Add/Edit Recipe">
<intent
Android:action="Android.intent.action.VIEW"
Android:targetPackage="com.ssimon.newdirectory"
Android:targetClass="com.ssimon.newdirectory.RecipeEditActivity"/>
</Preference>
La correction des noms de chemins a résolu le problème.
si nous faisons le activity
particulier comme
Android:exported="true"
ce sera le lancement activity
. Cliquez sur le nom du module juste à gauche de l'exécution button
et cliquez sur "Modifier les configurations ..." Assurez-vous maintenant que "Launch default Activity"
est sélectionné.