wake-up-neo.com

Android - Java.lang.SecurityException: Berechtigungsverweigerung: Intent starten

Ich habe eine Bibliothek (jar) im Erstellungspfad meines Projekts. Das Projekt greift auf die MainActivity in der Dose mit folgender Absicht zu:

final Intent it = new Intent();
it.setClassName("com.example.lib", "com.example.lib.MainActivity");
startActivity(it);

Früher hat es funktioniert, aber plötzlich bekam ich 'ActivityNotFoundException: No Activity gefunden, um Intent zu handhaben', was ich lösen konnte. Aber jetzt bin ich mit einem 'Java.lang.SecurityException: Permission Denial: Intent Starten' fest.

Ich habe alle Vorschläge für stackoverflow ausprobiert (nach Duplikaten in der Manifestdatei suchen; Android: exported = "true" zum lib-Manifest hinzufügen; Eclipse> Project> Clean; Hinzufügen/Ändern von 'Intent-Filter'-Tags usw.). Ich habe sogar versucht, das Manifest des Projekts neu zu schreiben, aber nirgendwohin zu gehen.

Hier ist die Logcat-Ausgabe:

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 des Projekts:

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

Was überblicke ich? Irgendwelche Vorschläge?

EDIT

Ich habe die manifest.xml mit allen anderen Aktivitäten aktualisiert und irgendwie das Problem gelöst. Die beabsichtigte Aktivität startet fehlerfrei. ABER, dies ist nur bei AVD. Auf dem tatsächlichen Gerät wird immer noch derselbe Fehler ausgegeben. Ich habe die App vollständig vom Gerät deinstalliert und erneut installiert, dabei jedoch derselbe Fehler.

45
Ramanathan

Die Ausnahme ist klar. Sie müssen Android:exported="true" in Ihrer AndroidManifest.xml-Datei angeben, in der Sie diese Activity angeben.

Bearbeiten

<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

Dies ist nur für Android Studio

So bin ich kürzlich auf dieses Problem gestoßen. Das Problem bestand in der Build/Run-Konfiguration. Anscheinend hatte Android Studio in meinem Projekt eine Aktivität als Startaktivität ausgewählt, so dass meine Auswahl in der Manifestdatei nicht berücksichtigt wurde.

Klicken Sie auf den Modulnamen links neben der Ausführungsschaltfläche und klicken Sie auf "Konfigurationen bearbeiten". Stellen Sie nun sicher, dass "Standardaktivität starten" ausgewählt ist.

Das lustige an diesem Fehler war, dass ich die App immer noch mit dem Gerät starten konnte und sie mit der bevorzugten Aktivität beginnt. Aber das Starten aus der IDE schien unmöglich.

39
Olayinka

Wählen Sie Ihre richtige Konfiguration zum Starten von Application aus.

In meinem Fall fand ich einen Fehler wie unter dem Bild:

enter image description here

Ich hatte mich gerade so verändert:

enter image description here

Möge es jemandem helfen, Danke :)

27
Pratik Butani

Fügen Sie in Ihrem Aktivitäts-Tag 'com.example.lib.MainActivity' Android: exported = "true" hinzu.

Von Android: Exportierte Dokumentation,

Android: exportiert Gibt an, ob die Aktivität von Komponenten anderer Anwendungen gestartet werden kann - "true", wenn dies möglich ist, und "false", wenn dies nicht der Fall ist. Bei "false" kann die Aktivität nur von Komponenten derselben Anwendung oder von Anwendungen mit derselben Benutzer-ID gestartet werden.

In Ihrer logcat-Ausgabe ist das Problem offensichtlich auf eine Nichtübereinstimmung der Benutzer-ID zurückzuführen. Das Hinzufügen von Android: exported = "true" sollte also ausreichen.

4
ss19

Ähnlich wie Olayinkas Antwort zur Konfigurationsdatei für ADT: Ich hatte gerade das gleiche Problem mit IntelliJ's IdeaU v14.

Ich arbeite gerade durch ein Tutorial, in dem ich die Startaktivität von MyActivity in MyListActivity geändert habe (was eine Liste von MyActivity ist). Ich habe angefangen, Permissions Denial zu erhalten.

Nach vielen Versuchen, Mühen und Schmerzen: In .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>
...

Ich änderte die MyActivity in MyListActivity, lud das Projekt neu und bin wieder am Start.

Sie sind sich nicht sicher, welche IDE Sie verwenden, aber Ihre IDE überschreibt oder zwingt möglicherweise eine bestimmte Startaktivität?

2
WernerCD

Wenn Sie versuchen, Ihre in Android Studio codierte App über Ihr Android-Telefon zu testen, liegt dies normalerweise an Ihrem Telefon. Deaktivieren Sie einfach alle USB-Debugging-Optionen und schalten Sie die Entwickleroptionen auf OFF. Starten Sie dann Ihr Telefon neu und schalten Sie den Entwickler und das USB-Debugging ein. Du bist bereit zu gehen!

1
bhavya sanghavi

In meinem Fall war dieser Fehler auf falsche Pfade zurückzuführen, die verwendet wurden, um Intents in der XML-Voreinstellungsdatei anzugeben, nachdem ich das Projekt umbenannt hatte. Zum Beispiel wo ich hatte:

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

Ich brauchte stattdessen Folgendes:

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

Durch die Korrektur der Pfadnamen wurde das Problem behoben.

0
stevehs17

wenn wir die besondere activity als machen 

Android:exported="true"

activity..__ wird gestartet. Klicken Sie links neben dem Lauf button auf den Namen des Moduls und klicken Sie auf "Konfigurationen bearbeiten ...". Stellen Sie nun sicher, dass "Launch default Activity" ausgewählt ist.

0