Android-java.lang.SecurityException: Denegación de permiso: intención de inicio


Tengo una biblioteca (jar) en la ruta de compilación de mi proyecto. El proyecto accede a la MainActivity en el jar, usando la siguiente intent:

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

Solía funcionar durante algún tiempo, pero de repente comenzó a obtener 'ActivityNotFoundException: No se encontró actividad para manejar Intent', que pude resolver. Pero ahora estoy atascado con un 'java.lang.SecurityException: Permission Denial: starting Intent'.

He probado todas las sugerencias hechas en stackoverflow (compruebe si hay duplicados en el manifiesto file; add android: exported = "true" to lib manifest; Eclipse > Project> Clean; adding / modifying 'intent-filter' tags; etc.). Incluso traté de reescribir el manifiesto del proyecto, pero no ir a ninguna parte con él.

Aquí está la salida de 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 de manifiesto del proyecto:

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

¿Qué estoy pasando por alto? Alguna sugerencia?

EDITAR

He actualizado el manifiesto.xml con todas las demás actividades y de alguna manera, que resolvió el problema. La actividad intent arranca sin errores. PERO, esto es solo en AVD. En el dispositivo real, todavía está lanzando el mismo error. He desinstalado la aplicación del dispositivo por completo y reinstalado, pero el mismo error.

Author: Ramanathan, 2013-11-07

8 answers

La excepción es clara. Necesitas establecer android:exported="true" en tu AndroidManifest.archivo xml donde se declara esta Actividad.

Editar

<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>
 102
Author: Sunny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-07 07:01:02

Esto es solo para android studio

Así que me encontré con este problema recientemente. El problema estaba en la configuración de compilación / ejecución. Al parecer android studio había elegido una actividad en mi proyecto como la actividad de lanzamiento de descartando mi elección en el archivo de manifiesto.

Haga clic en el nombre del módulo justo a la izquierda del botón ejecutar y haga clic en "Editar configuraciones"..."Ahora asegúrese de que" Iniciar actividad predeterminada " está seleccionado.

Lo gracioso cuando obtuve este error fue que pude todavía inicie la aplicación desde el dispositivo y comienza con la actividad preferida. Pero el lanzamiento desde el IDE parecía imposible.

 38
Author: Olayinka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-08 06:21:35

Seleccione la configuración adecuada para iniciar la aplicación.

En mi caso, encontré un error como la siguiente imagen:

introduzca la descripción de la imagen aquí

Yo acababa de cambiar como:

introduzca la descripción de la imagen aquí

Que ayude a alguien, Gracias :)

 27
Author: Pratik Butani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-23 07:42:01

Agrega android:exported="true" en tu 'com.ejemplo.lib.Etiqueta de actividad de MainActivity.

Desde la documentación de android: exported,

Android: exportado Si la actividad puede ser lanzada o no por componentes de otras aplicaciones - "true" si puede ser, y "false" si no. Si es "false", la actividad solo puede ser iniciada por componentes de la misma aplicación o aplicaciones con el mismo ID de usuario.

Desde su salida logcat, claramente un desajuste en uid es causando el problema. Así que agregar el android: exported = "true" debería hacer el truco.

 4
Author: ss19,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-15 12:39:31

Similar a la respuesta de Olayinka sobre el archivo de configuración para ADT: Acabo de tener el mismo problema en IdeaU v14 de IntelliJ.

Estoy trabajando en un tutorial que me hizo cambiar la actividad inicial de MyActivity a MyListActivity (Que es una lista de MyActivity). Empecé a recibir Denegación de permisos.

Después de mucha prueba, trabajo y dolor: En .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>
...

Cambié el MyActivity a MyListActivity, recargé el proyecto y estoy listo para comenzar de nuevo.

No estoy seguro de cuál IDE que está utilizando, pero tal vez su IDE está anulando o forzando una actividad de inicio específica?

 2
Author: WernerCD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-20 18:42:20

Si está intentando probar su aplicación codificada en android Studio a través de su teléfono Android, generalmente es el problema de su teléfono. Simplemente desmarque todas las opciones de depuración USB y desactive las opciones de desarrollador. A continuación, reinicie su teléfono y active el desarrollador y la depuración USB. Usted está listo para ir!

 1
Author: bhavya sanghavi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-04 12:18:30

En mi caso, este error se debió a rutas incorrectas utilizadas para especificar intents en mi archivo xml de preferencias después de cambiar el nombre del proyecto. Por ejemplo, donde tuve:

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

Necesitaba lo siguiente en su lugar:

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

La corrección de los nombres de ruta solucionó el problema.

 0
Author: stevehs17,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-02 19:29:14

Si hacemos el particular activity como

android:exported="true"

Será el lanzamiento activity. Haga clic en el nombre del módulo justo a la izquierda de la ejecución button y haga clic en "Editar configuraciones..."Ahora asegúrese de que "Launch default Activity" está seleccionado.

 0
Author: Nison Cheruvathur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-16 20:30:13