Подтвердить что ты не робот

Android - java.lang.SecurityException: отказ от разрешения: начало работы

У меня есть библиотека (jar) на пути сборки моего проекта. Проект получает доступ к MainActivity в банке, используя следующее намерение:

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

Он когда-то работал, но внезапно начал получать "ActivityNotFoundException: No Activity found for обрабатывать Intent", который я смог решить. Но теперь я застрял с "java.lang.SecurityException: Permission Denial: start Intent".

Я пробовал все предложения, сделанные в stackoverflow (проверьте наличие дубликатов в файле манифеста, добавьте android: exported = "true" в манифест lib) Eclipse > Project > Clean, добавление/изменение тегов "фильтр намерения" и т.д.)., Я даже пытался переписать манифест проекта, но никуда не отправился.

Здесь вывод 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 со всеми другими действиями и каким-то образом решил проблему. Действия по запуску запускаются без ошибок. НО, это только на AVD. На самом устройстве он все равно бросает ту же ошибку. Я полностью удалил приложение из устройства и переустановил его, но та же ошибка.

4b9b3361

Ответ 1

Исключение становится ясным. Вам нужно установить 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>

Ответ 2

Это только для студии Android

Итак, я столкнулся с этой проблемой недавно. Проблема была в конфигурации сборки/запуска. Очевидно, андроид-студия выбрала активность в моем проекте как активность запуска, не обращая внимания на мой выбор в файле манифеста.

Нажмите на имя модуля слева от кнопки запуска и нажмите "Изменить конфигурации...". Теперь убедитесь, что выбран "Запустить действие по умолчанию".

Самое смешное, когда я получил эту ошибку, состоял в том, что я все равно мог запустить приложение с устройства, и он начинается с предпочтительного действия. Но запуск с IDE казался невозможным.

Ответ 3

Выберите подходящую конфигурацию для запуска приложения.

В моем случае я нашел ошибку, как показано ниже:

enter image description here

Я только что изменился, как:

enter image description here

Пусть это поможет кому-то, спасибо:)

Ответ 4

Добавьте в анкете тега 'com.example.lib.MainActivity' команду android: exported = "true" .

Из файла android: экспортированная документация,

Android: экспортироваться Независимо от того, может ли эта активность запускаться компонентами других приложений - "true" , если она может быть, и "false", если нет. Если "false", активность может запускаться только компонентами одного приложения или приложений с одним и тем же идентификатором пользователя.

Из вашего вывода logcat явно возникает несоответствие в uid. Поэтому добавление андроида: exported = "true" должно сделать трюк.

Ответ 5

Как и 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 переопределяет или вызывает определенную начальную активность?

Ответ 6

Если вы пытаетесь протестировать приложение, закодированное в студии Android, через свой Android-телефон, это, как правило, проблема вашего телефона. Просто снимите все опции отладки USB и переключите параметры разработчика на OFF. Затем перезагрузите телефон и включите девайс разработчика и USB. Вы готовы к работе!

Ответ 7

В моем случае эта ошибка возникла из-за неправильных путей, используемых для указания намерений в моем 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>

Исправление имен путей устранило проблему.

Ответ 8

если мы сделаем конкретный activity как

android:exported="true"

это будет запуск activity. Нажмите на имя модуля слева от пробега button и нажмите "Изменить конфигурации...". Теперь убедитесь, что выбран "Launch default Activity".