2011-06-02 25 views
7

Tengo un problema con los permisos de mi aplicación. Parece que mi aplicación no tiene permisos para crear archivos en el almacenamiento.Android openFileOutput: sin permiso para crear almacenamiento

String FILENAME = "hello_file"; 
String string = "hello world!"; 
FileOutputStream fos; 

try 
{ 
    fos = getApplicationContext() 
      .openFileOutput(FILENAME, Context.MODE_PRIVATE);  
    fos.write(string.getBytes()); 
    fos.close(); 
} 
catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

En mi principal manejador onCreate clase, y siempre me sale:

06-02 13:23:52.996: WARN/ApplicationContext(6278): Unable to create files directory 
06-02 13:23:54.203: WARN/System.err(6278): java.lang.NullPointerException 
06-02 13:23:54.226: WARN/System.err(6278):  at android.app.ContextImpl.openFileOutput(ContextImpl.java:464) 
06-02 13:23:54.234: WARN/ActivityManager(2470): Activity idle timeout for HistoryRecord{485ebe10 com.servision.svclient/.Main} 
06-02 13:23:54.257: WARN/System.err(6278):  at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:158) 
06-02 13:23:54.273: WARN/System.err(6278):  at com.servision.svclient.Main.onCreate(Main.java:59) 
06-02 13:23:54.277: WARN/System.err(6278):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
06-02 13:23:54.285: WARN/System.err(6278):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
06-02 13:23:54.293: WARN/System.err(6278):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
06-02 13:23:54.296: WARN/System.err(6278):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
06-02 13:23:54.304: WARN/System.err(6278):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
06-02 13:23:54.312: WARN/System.err(6278):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-02 13:23:54.320: WARN/System.err(6278):  at android.os.Looper.loop(Looper.java:123) 
06-02 13:23:54.324: WARN/System.err(6278):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
06-02 13:23:54.332: WARN/System.err(6278):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-02 13:23:54.336: WARN/System.err(6278):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-02 13:23:54.343: WARN/System.err(6278):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858) 
06-02 13:23:54.355: WARN/System.err(6278):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
06-02 13:23:54.359: WARN/System.err(6278):  at dalvik.system.NativeStart.main(Native Method) 

en respuesta.

Creo que es algo muy simple en las definiciones de mi proyecto. Pero no puedo descifrar de qué se trata.

Si creo otro proyecto y puse mismo código a ella, que trabaja muy bien.

mi archivo de manifiesto es el siguiente:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.servision.svclient" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 


    <application android:icon="@drawable/main" android:label="@string/app_name" android:debuggable="true"> 
    <activity android:name=".Main" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".StreamActivity" android:label="@string/app_name"/>   
    <activity android:name=".MainActivity"/> 
    <activity android:name=".GatewayList"/> 
    <activity android:name=".StatisticsActivity"/> 
    <activity android:name=".SettingsActivity"/> 
    <activity android:name=".MapsActivity"/> 
    <activity android:name=".AboutActivity"/> 
    </application> 
    <uses-sdk android:minSdkVersion="8" /> 


</manifest> 
+1

¿Cuál es en su línea 59 de Main.java –

+0

Realmente no creo que el almacenamiento interno necesita el permiso. es el rastro de pila publicado está lleno? o estás omitiendo líneas – doNotCheckMyBlog

+1

No existe ningún permiso como android.permission.WRITE_INTERNAL_STORAGE –

Respuesta

0

es el archivo que está accediendo sin duda en el almacenamiento interno? No ha declarado el permiso WRITE_EXTERNAL_STORAGE. Usted tendría que esta va a escribir en la tarjeta sd

+1

sí, no tiene ruta, así que supongo que se creará en el almacenamiento interno, e incluso si agrego WRITE_EXTERNAL_STORAGE, todavía no funcionará – AlexS

+0

he resuelto este problema eliminando manualmente la carpeta de la aplicación completa del dispositivo. – AlexS

+0

openFileOutput() devuelve una ruta en el ** almacenamiento ** interno. –

0

La variable FILENAME está mal: ¿cuál es el valor de FILENAME?

Ese error se debe a un intento de producir un archivo basa fuera el nombre del archivo resultados variables en un valor nulo en el interior openFileOutput. Entonces, FILENAME no está produciendo un archivo válido.

+1

valor de FILENAME es "file_ouput", pero si lo cambio a cadena codificada, diga "prueba", no importa, aún así fallará. – AlexS

+1

resolví este problema al eliminar manualmente la carpeta de la aplicación completa del dispositivo. – AlexS

+0

Ah, ¿cambió el certificado de firma? Si firma la aplicación con un certificado diferente (por ejemplo, si su certificado de depuración expira y genera uno nuevo o si usa un certificado de lanzamiento), la propiedad en el directorio subyacente cambiará. Sin embargo, el puntero nulo es un error extraño ... – Femi

3

gestión de dispositivos => Haga clic en Dispositivo => Desinstalar aplicaciones => Vuelva a ejecutar.

+1

Si bien esta idea puede parecer un poco aleatoria, es buena."No se puede crear el directorio de archivos" es probablemente un error a nivel de sistema que resulta del catálogo de aplicaciones instaladas del dispositivo que se vuelve inconsistente consigo mismo, por lo tanto ** quitar y volver a instalar ** la aplicación puede ser el curso de acción más apropiado. Al menos no parece que el problema esté en el código de la aplicación en sí. –

Cuestiones relacionadas