Android - java.lang.SecurityException:Permission Denial:启动Intent

Ram*_*han 54 android android-intent android-library

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

final Intent it = new Intent();
it.setClassName("com.example.lib", "com.example.lib.MainActivity");
startActivity(it);
Run Code Online (Sandbox Code Playgroud)

它曾经工作了一段时间,但突然开始得到'ActivityNotFoundException:没有找到活动来处理Intent',我能够解决它.但是现在我遇到了'java.lang.SecurityException:Permission Denial:start Intent'.

我已经尝试了所有关于stackoverflow的建议(检查清单文件中的重复项;将lib:exported ="true"添加到lib清单; Eclipse> Project> Clean;添加/修改'intent-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)
Run Code Online (Sandbox Code Playgroud)

清单项目的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>
Run Code Online (Sandbox Code Playgroud)

我在俯瞰什么?有什么建议?

编辑

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

Sun*_*nny 125

例外很清楚.您需要android:exported="true"AndroidManifest.xml文件中设置声明此位置的位置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>
Run Code Online (Sandbox Code Playgroud)

  • 试过这个。我在项目的 manifest.xml 文件中的 `&lt;activity android:name="com.example.lib.MainActivity"` 下添加了 `android:exported="true"` 。给我同样的错误。 (4认同)
  • 清单中的活动现在看起来像这样: `&lt;activity "com.example.lib.MainActivity" android:label="LibMain" android:exported="true"&gt; &lt;/activity&gt;` 仍然是同样的错误 (2认同)

Ola*_*nka 40

这只适用于android studio

所以我最近遇到了这个问题.问题出在构建/运行配置中.显然,android studio在我的项目中选择了一个活动作为启动活动,因此忽略了我在清单文件中的选择.

单击运行按钮左侧的模块名称,然后单击"编辑配置..."现在确保选中"启动默认活动".

当我收到此错误时,有趣的是我仍然可以从设备启动应用程序并从首选活动开始.但是从IDE启动似乎是不可能的.

  • Gah,我也遇到过这种情况(在猫睡在键盘上之后).永远地追查这个问题.虽然猫很容易追踪. (4认同)
  • 谢谢兄弟...它奏效了...有时小问题变得大...但我学到了一些叫做 android:export = true 的东西...thnx (2认同)

Pra*_*ani 28

选择适当的配置以启动应用程序.

在我的情况下,我发现错误如下图:

在此输入图像描述

我刚改变了:

在此输入图像描述

愿它对某人有所帮助,谢谢:)


ss1*_*s19 5

在“ com.example.lib.MainActivity”活动代码中添加android:exported =“ true”。

从android:exported文档中,

android:exported该活动是否可以由其他应用程序的组件启动-如果可以,则为“ true”,如果不能,则为“ false”。如果为“ false”,则该活动只能由相同应用程序或具有相同用户ID的应用程序的组件启动。

从您的logcat输出中,显然uid的不匹配导致了问题。因此,添加android:exported =“ true”应该可以解决问题。