安全异常: 权限拒绝: 启动意图

我在项目的构建路径上有一个库(jar)。该项目使用以下意图访问 jar 中的 MainActivity:

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

它曾经工作了一段时间,但突然开始得到“ ActivityNotFoundException: 没有活动发现处理意图”,我能够解决这个问题。但现在我被爪哇狼困住了。安全异常: 权限拒绝: 启动意图’。

我已经尝试了所有关于 stackoverflow 的建议(检查清单文件中的重复内容; 添加 android: export = “ true”to lib Manifs; Eclipse > Project > Clean; 添加/修改‘ Italy-filter’标记; 等等)。我甚至尝试重写项目的清单,但没有去任何地方与它。

下面是 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)

项目的清单 XML:

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

我忽略了什么,有什么建议吗?

剪辑

我用所有其他活动更新了 Manif.xml,并以某种方式解决了这个问题。意图活动启动时没有任何错误。但是,这只是在 AVD 上。在实际设备上,它仍然抛出相同的错误。我已经从设备完全卸载应用程序和重新安装,但同样的错误。

177587 次浏览

You need to set android:exported="true" in your AndroidManifest.xml file where you declare this Activity:

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

This is only for android studio

So I ran into this problem recently. The issue was in the build/run configuration. Apparently android studio had chosen an activity in my project as the launch activity thus disregarding my choice in the manifest file.

Click on the module name just to the left of the run button and click on "Edit configurations..." Now make sure "Launch default Activity" is selected.

The funny thing when I got this error was that I could still launch the app with from the device and it starts with the preferred Activity. But launching from the IDE seemed impossible.

Similar to Olayinka's answer about the configuration file for ADT: I just had the same issue on IntelliJ's IdeaU v14.

I'm working through a tutorial that had me change the starting activity from MyActivity to MyListActivity (Which is a list of MyActivity). I started getting Permissions Denial.

After much trial, toil and pain: 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>
...

I changed the MyActivity to MyListActivity, reloaded the project and I'm off to a rolling start again.

Not sure which IDE you are using, but maybe your IDE is overriding or forcing a specific starting activity?

Select your proper configuration for launching Application.

In my case i found mistake as below image:

enter image description here

I had just changed like:

enter image description here

May it will help to someone, Thanks :)

In my case, this error was due to incorrect paths used to specify intents in my preferences xml file after I renamed the project. For instance, where I had:

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

I needed the following instead:

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

Correcting the path names fixed the problem.

If you are trying to test your app coded in android studio through your android phone, its generally the issue of your phone. Just uncheck all the USB debugging options and toggle the developer options to OFF. Then restart your phone and switch the developer and USB debugging on. You are ready to go!

if we make the particular activity as

android:exported="true"

it will be the launching activity. Click on the module name just to the left of the run button and click on "Edit configurations..." Now make sure "Launch default Activity" is selected.

Add android:exported="true" in your 'com.example.lib.MainActivity' activity tag.

From the android:exported documentation,

android:exported Whether or not the activity can be launched by components of other applications — "true" if it can be, and "false" if not. If "false", the activity can be launched only by components of the same application or applications with the same user ID.

From your logcat output, clearly a mismatch in uid is causing the issue. So adding the android:exported="true" should do the trick.

I was facing this issue on a react-native project and it came after adding a splash screen activity and making it the launcher activity.

This is the change i made in my android manifest XML file on the MainActivity configuration.

<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize"/>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />

I added the android:exported=true and the activity configuration looked like this.

 <activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize"/>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />

AppActivity of any app which does not contain .SplashActivity at the end will throw this type of permisssion error. Make sure that AppActivity contain .SplashActivity at the end. If .SplashActivity is not present then it means app is not allowing for mobile automating

android:exported="true" this line add in your first opening activity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.triad.hp">
    

<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:required="false"   tools:node="remove" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:required="false" tools:node="remove" />
<uses-permission
android:name="android.permission.READ_SMS"
android:required="false" tools:node="remove" />
<uses-permission
android:name="android.permission.RECEIVE_SMS"
android:required="false" tools:node="remove" />
    

<uses-permission android:name="android.permission.INTERNET"/>
    

<uses-permission android:name="com.hp.kiosk.data.PERMISSION"/>
    

<application
android:hardwareAccelerated="true"
android:usesCleartextTraffic="false"
android:name=".App"
android:configChanges="keyboard|keyboardHidden|screenSize|orientation"
android:icon="@drawable/logo"
android:allowBackup="false"
android:label="@string/app_name"
android:roundIcon="@drawable/logo"
android:debuggable="false"
android:theme="@style/AppTheme"
tools:ignore="HardcodedDebugMode">
<activity
android:protectionLevel="signature"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|screenSize|orientation"
android:name=".activities.PaymentActivity"
tools:ignore="LockedOrientationActivity"
android:exported="true">
<intent-filter>
<action android:name="org.triad.hp.activities.PaymentActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
    

<activity
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|screenSize|orientation"
android:name=".activities.MainActivity"
tools:ignore="LockedOrientationActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
    

<activity
android:exported="false"
tools:replace="android:screenOrientation"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|screenSize|orientation"
android:name="com.paytm.pgsdk.PaytmPGActivity"
tools:ignore="HardcodedDebugMode,LockedOrientationActivity" />
</application>
    

</manifest>