2011-05-28 28 views
8

Así que la última pared que he tocado es al intentar escribir en la tarjeta SD con mi programa. Estoy recibiendo:Denegación de permiso: ... requiere android.permission.WRITE_EXTERNAL_STORAGE

[2011-05-28 10:00:16 - LatinDictionary] ActivityManager: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.joelman.latindictionary/.LatinDictionary } from null (pid=-1, uid=-1) requires android.permission.WRITE_EXTERNAL_STORAGE 

Como se puede ver en mi manifiesto a continuación, he añadido el permiso (También probé agregarlo a cada una de las actividades, en vano). ¿Qué me estoy perdiendo?

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.joelman.latindictionary" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:permission="android.permission.WRITE_EXTERNAL_STORAGE"> 
    <activity android:name=".LatinDictionary"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN"></action> 
<category android:name="android.intent.category.LAUNCHER"></category> 
</intent-filter> 
<intent-filter><action android:name="android.intent.action.SEARCH"></action> 
</intent-filter> 
</activity> 

<provider android:name="DictionaryProvider" android:authorities="com.joelman.latindictionary.DictionaryProvider"></provider> 
</application> 

</manifest> 

TIA, Joel

Respuesta

6

Ponga la línea de permiso fuera de la etiqueta de la aplicación, pero dentro de manifiesto una

+0

Esa debe ser la correcta responder. Además, observe que las nuevas versiones de Android SDK incluyen una herramienta 'lint' para encontrar este tipo de errores por adelantado. –

16

Debería ser así:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.joelman.latindictionary" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:permission="android.permission.WRITE_EXTERNAL_STORAGE"> 
    <activity android:name=".LatinDictionary"> 
    <intent-filter> 
    <action android:name="android.intent.action.MAIN"></action> 
<category android:name="android.intent.category.LAUNCHER"></category> 
</intent-filter> 
<intent-filter><action android:name="android.intent.action.SEARCH"></action> 
</intent-filter> 
</activity> 

<provider android:name="DictionaryProvider" android:authorities="com.joelman.latindictionary.DictionaryProvider"></provider> 
</application> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
</manifest> 
+2

¡GRACIAS! Nota: También tuve que eliminar el permiso del nodo para que se ejecutara. – user568259

+3

?? ¿Cuál es la diferencia entre los dos? El se movió, pero originalmente estaba dentro del elemento y NO dentro del elemento , entonces ¿por qué importarían el orden o el y (en xml)? – Ribo

+0

Lo tenía fuera de la etiqueta '', pero estaba al principio del archivo. Trasladar el permiso a _after_ la etiqueta '' lo hizo funcionar. –

Cuestiones relacionadas