Android-java.lang.SecurityException:权限被拒绝:启动意图

问题描述 投票:57回答:9

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

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

它曾经工作了一段时间,但突然开始得到我能够解决的'ActivityNotFoundException:No Activity to handle Intent'。但是现在我陷入了'java.lang.SecurityException:权限拒绝:启动Intent'。

我已经尝试了所有关于stackoverflow的建议(检查清单文件中的重复项;将android: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)

项目的清单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>

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

编辑

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

android android-intent android-library
9个回答
127
投票

例外很明显。您需要在声明此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>

41
投票

这仅适用于android studio

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

单击运行按钮左侧的模块名称,然后单击“编辑配置...”,请确保已选择“启动默认活动”。

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


28
投票

选择用于启动应用程序的适当配置。

就我而言,我发现了如下图所示的错误:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9mMm1Ubi5wbmcifQ==” alt =“在此处输入图像描述”>

我刚刚更改为:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9BNno5bC5wbmcifQ==” alt =“在此处输入图像描述”>

可能对某人有帮助,谢谢:)


5
投票

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

摘自android:exported文档,

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

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


2
投票

类似于Olayinka关于ADT的配置文件的答案:我在IntelliJ的IdeaU v14上也遇到了同样的问题。

我正在研究一个使我将开始活动从MyActivity更改为MyListActivity(这是MyActivity的列表)的教程。我开始拒绝权限。

经过反复试验,辛苦和痛苦:在.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>
...

我将MyActivity更改为MyListActivity,重新加载了项目,然后又要重新开始滚动。

不确定您使用的是哪个IDE,但是您的IDE可能是替代或强制了特定的开始活动?


1
投票

[如果您尝试通过Android手机测试在Android Studio中编码的应用,则通常是手机问题。只需取消选中所有USB调试选项,然后将开发人员选项切换为OFF。然后重新启动手机,并打开开发人员和USB调试。您准备好了!


1
投票

我在一个本机反应项目上遇到了这个问题,它是在添加启动画面活动并将其作为启动程序活动之后发生的。

这是我在MainActivity配置上的Android清单XML文件中所做的更改。

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

我添加了android:exported=true活动配置如下所示。

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

0
投票

就我而言,此错误是由于在重命名项目后,用于在首选项xml文件中指定意图的路径不正确。例如,我在哪里:

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

我需要以下内容:

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

更正路径名解决了该问题。


0
投票

如果我们将特定的activity设为

android:exported="true"

它将是启动activity。单击运行button左侧的模块名称,然后单击“编辑配置...”,现在确保已选择"Launch default Activity"

© www.soinside.com 2019 - 2024. All rights reserved.