Android – java.lang.SecurityException:权限拒绝:启动意图
我有一个库(jar)在我的项目的构buildpath。 该项目使用以下意图访问jar中的MainActivity:
final Intent it = new Intent(); it.setClassName("com.example.lib", "com.example.lib.MainActivity"); startActivity(it);
它曾经工作了一段时间,但突然开始得到'ActivityNotFoundException:没有find活动处理意向',我能够解决。 但是现在我被一个'java.lang.SecurityException:Permission Denial:starting Intent'卡住了。
我已经尝试了所有在stackoverflow上的build议(检查清单文件中的重复项;添加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>
我忽略了什么? 有什么build议么?
编辑
我用所有其他活动更新了manifest.xml,并以某种方式解决了这个问题。 意图活动启动没有任何错误。 但是 ,这只是在AVD上。 在实际的设备上,它仍然抛出相同的错误。 我已经完全卸载了设备上的应用程序,然后重新安装,但同样的错误。
例外是清楚的。 您需要在声明此Activity的AndroidManifest.xml文件中设置android:exported="true"
。
编辑
<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>
这只适用于android studio
所以最近我遇到了这个问题。 这个问题是在构build/运行configuration。 显然android studio已经在我的项目中select了一个活动作为启动活动,因此无视我在清单文件中的select。
单击运行button左侧的模块名称,然后单击“编辑configuration…”。现在确保select“启动默认活动”。
当我得到这个错误时,有趣的是,我仍然可以从设备启动应用程序,并从首选的活动开始。 但从IDE启动似乎不可能。
select适当的configuration启动应用程序。
在我的情况下,我发现错误如下图:
我刚刚改变像:
可能会帮助某人,谢谢:)
在你的'com.example.lib.MainActivity'活动标签中添加android:exported =“true”。
从android:exports文档中,
android:exported是否可以由其他应用程序的组件启动活动 – 如果可以,则为“true”,否则为“false”。 如果为“false”,则只能由具有相同用户ID的相同应用程序或应用程序的组件启动活动。
从你的logcat输出中,很显然uid中的不匹配导致了这个问题。 因此,添加android:exported =“true”应该可以做到。
与Olayinka关于ADTconfiguration文件的答案类似:我在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覆盖或强制执行特定的开始活动?
如果您试图通过您的android手机testing您的应用程序编码在android工作室,它通常是您的手机的问题。 只要取消所有的USBdebugging选项,并将开发者选项切换到closures。 然后重新启动手机并开启开发者和USBdebugging。 你准备好了!
在我的情况下,这个错误是由于我重命名该项目后用于指定我的首选项xml文件中的意图的path不正确。 例如,我有:
<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>
更正path名称可以解决问题。
如果我们做特定的activity
android:exported="true"
这将是启动activity
。 单击运行button
左侧的模块名称,然后单击“编辑configuration…”。现在确保select"Launch default Activity"
。