web-dev-qa-db-fra.com

Android - Java.lang.SecurityException: refus d'autorisations: démarrage de l'intention

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.

45
Ramanathan

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>
109
Sunny

Ceci est seulement pour le studio Android

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.

39
Olayinka

Sélectionnez votre configuration appropriée pour lancer l'application.

Dans mon cas, j'ai trouvé l'erreur suivante:

enter image description here

Je venais de changer comme:

enter image description here

Peut aider à quelqu'un, merci :)

27
Pratik Butani

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.

4
ss19

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?

2
WernerCD

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!

1
bhavya sanghavi

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.

0
stevehs17

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é.

0