Android-java.ленг.SecurityException: отказ в разрешении: намерение запуска
у меня есть библиотека (jar) на пути сборки моего проекта. Проект обращается к MainActivity в jar, используя следующее намерение:
final Intent it = new Intent();
it.setClassName("com.example.lib", "com.example.lib.MainActivity");
startActivity(it);
он работал некоторое время, но внезапно начал получать "ActivityNotFoundException: нет активности для обработки намерения", которое я смог решить. Но теперь я застрял с "java".ленг.SecurityException: отказ в разрешении: запуск намерения".
Я пробовал все предложения, сделанные на 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>
что я упускаю из виду? Есть предложения?
редактировать
я обновил манифест.xml со всеми другими деятельность и то, что проблема решена. Активность намерение запускается без каких либо ошибок. но, это только на AVD. На фактическом устройстве он по-прежнему выдает ту же ошибку. Я удалил приложение с устройства полностью и переустановил, но та же ошибка.
8 ответов
исключение ясно. Вам нужно установить android:exported="true"
в вашем AndroidManifest.xml-файл, в котором объявляется это действие.
редактировать
<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/run. По-видимому, android studio выбрала действие в моем проекте в качестве запуска, таким образом, игнорируя мой выбор в файле манифеста.
нажмите на имя модуля слева от кнопки " выполнить "и нажмите " Изменить конфигурации"..."Теперь убедитесь, что выбрано "запустить действие по умолчанию".
забавная вещь, когда я получил это ошибка заключалась в том, что я все еще мог запустить приложение с устройства, и оно начинается с предпочтительной активности. Но запуск из IDE казался невозможным.
Выберите правильную конфигурацию для запуска приложения.
в моем случае я нашел ошибку, как показано ниже:
Я только что изменился, как:
может это поможет кому-то, спасибо :)
добавить android: exported= "true"в вашем com.образец.движение за освобождение.Тег действия MainActivity'.
из android: экспортированная документация,
android: экспортировано Может ли действие быть запущено компонентами других приложений - "true", если это возможно, и" false", если нет. Если "false", действие может быть запущено только компонентами того же приложения или приложений с тем же идентификатором пользователя.
с вашего выхода logcat, очевидно, что несоответствие в uid вызывает проблему. Поэтому добавление android: exported= "true" должно сделать трюк.
похоже на ответ Олайинки о конфигурационном файле для ADT: у меня была та же проблема с IdeaU V14 IntelliJ.
Я работаю через учебник, который заставил меня изменить начальную активность с MyActivity
to MyListActivity
(список MyActivity
). Я начал получать отказ в разрешениях.
после многих испытаний, труда и боли: В.идея\рабочее пространство.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
to MyListActivity
, перезарядил проект и я прокатки начать снова.
не уверен, какую IDE вы используете, но, возможно, ваша IDE переопределяет или заставляет определенную начальную деятельность?
Если вы пытаетесь проверить свое приложение, закодированное в Android studio через ваш телефон android, это, как правило, проблема вашего телефона. Просто снимите все параметры отладки USB и переключите Параметры разработчика в положение OFF. Затем перезагрузите телефон и включите отладку разработчика и USB. Вы готовы идти!
в моем случае эта ошибка была вызвана неправильными путями, используемыми для указания намерений в xml-файле моих предпочтений после переименования проекта. Например, где у меня было:--3-->
<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>
исправление имен путей исправило проблему.
если мы сделаем конкретное activity
as
android:exported="true"
это будет начало activity
.
Нажмите на название модуля слева от run button
и нажмите "Редактировать конфигурации"...- Теперь убедись!--4--> выбран.