Autore Topic: Impossibile scrivere nel file system dell'emulatore/tablet: readonly fs  (Letto 1621 volte)

Offline stesic74

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    Xp e Ubuntu 10.x(si aggiorna di continuo)
ciao a tutti,
mi hanno rifilato un tablet perché un fornitore inadempiente non ha fatto il lavoro che gli spettava. Ora mi ritrovo, dall'inadempiente, installato sul mio pc, l'emulatore Android(2.2) + phonegap e sto cercando di salvare dei file da un server in rete.

Elenco gli accorgimenti presi:
  • i files sul server ci sono e li raggiungo via browser e via ajax;
  • nel manifest c'è tutto l'occorrente per salvare sulla sdcard(sotto posto il codice)
  • ho usato l'ultimissima versione del plugin per scaricare i files (https://github.com/purplecabbage/phonegap-plugins/tree/master/Android/Downloader) di Neumann
  • Mi è palese che non posso scrivere niente nel filesystem dell'emulatore o sulla sdcard(ho provato anche su un tablet, stesso errore)
    Non crea ad esempio la directory(riga 66 del Downloader.java): non da' errore, ma se subito dopo metto un log con dir.exists() da false.
  • Environment.getExternalStorageDirectory() mi da /mnt/sdcard. Usandola come directory di scrittura non crea niente
  • Environment.getRootDirectory().canWrite() da false
  • Environment.getExternalStorageState() da removed

Ho cercato in almeno 100 tra forum, help di android developers in americano e in tutto lo scibile. Niente. Tutti hanno risolto il problema con semplici accorgimenti, come il <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> nel manifest.
Tutte le soluzioni suggerite e risolventi il problema, non sono servite a me.

Vi chiedo, visto che non ho installato io Eclipse, l'emulatore e phonegap: manca qualche settaggio? Qualche boiata di impostazione?
Sono esausto...faccio prove da stanotte.
Ho creato cartelle, cartelle sotto la rootDirectory, sulla sdcard(che non c'è, ovviamente, vedi elenco), tentato ogni via tentabile vista la mia poca esperienza in materia di app: cosa può mancare?

Vi posto il manifest(che dovrebbe aver tutto). Grazie in anticipo
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.phonegap.mioprogetto"
   android:versionCode="1"
   android:versionName="1.0" >
        <supports-screens
                android:largeScreens="true"
                android:normalScreens="true"
                android:smallScreens="true"
                android:resizeable="true"
                android:anyDensity="true"
        />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.RECEIVE_SMS" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <uses-permission android:name="android.permission.READ_CONTACTS" />
        <uses-permission android:name="android.permission.WRITE_CONTACTS" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />


    <uses-sdk android:minSdkVersion="8" />

    <application
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name" >
        <activity
           android:label="@string/app_name"
           android:name=".mioprogettoActivity"
           android:configChanges="orientation|keyboardHidden">
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.phonegap.DroidGap" android:label="@string/app_name" android:configChanges="orientation|keyboardHidden">
                <intent-filter> </intent-filter>
        </activity>
    </application>
   
    <application android:name="com.xyz.MyApplication">

        </application>

</manifest>



Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Impossibile scrivere nel file system dell'emulatore/tablet: readonly fs
« Risposta #1 il: 18 Dicembre 2011, 01:09:09 CET »
0
Ciao! Se, nell'emulatore, Environment.getExternalStorageState() ti restituisce removed, credo sia perché non è stata aggiunto lo spazio per una scheda sd. Prova a controllare ed eventualmente modificarlo aggiungendo una scheda sd, o in alternativa creane uno nuovo. Alla creazione/modifica dovresti avere qualcosa di simile a questo: http://android.okhelp.cz/wp-content/uploads/android-emulator-install-sd-card-eclipse.png

Offline stesic74

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    Xp e Ubuntu 10.x(si aggiorna di continuo)
Re:Impossibile scrivere nel file system dell'emulatore/tablet: readonly fs
« Risposta #2 il: 18 Dicembre 2011, 12:22:09 CET »
0
Ciao Verandi, grazie per l'aiuto  ;-)
In ogni caso sono giunto alla soluzione intorno all'una, proprio mentre mi rispondevi  :-)
Il tizio che ha scritto il plugin, non ha tenuto conto di due cose.
Di default, alla riga 39, mette la cartella "sdcard/download": avevo testato all'inizio con questa ma non andava perché è un percorso relativo.
Poi ho corretto mettendo "/sdcard/download" ma a quel punto non mi andava sull'emulatore perché, come dici tu, non avevo creato una sdcard virtuale(e non provavo sul tablet convinto che non andasse lo stesso, invece avrebbe funzionato subito grrrrr  >:().
Una volta creata la sdcard virtuale è andato tutto a posto.
Il problema è che, fidandomi di un plugin "ufficiale", ho battuto la testa arrovellandomi su possibili errori di scrittura, permessi e cavolate varie  8-)
La seconda cosa di cui non ha tenuto conto è che, come ho letto in qualche forum, non sempre "/sdcard" è la directory di default della carta. Quindi alla riga 60 del suo codice, per mia necessità, ho aggiunto:
dirName=Environment.getExternalStorageDirectory()+dirName;
per avere la certezza di partire sempre dalla root della sdcard :)
Se invece devo partire da una cartella del filesystem del tablet, beh non saprei dire se ci sono i permessi per farlo(mi sembra di no):
ho provato infatti a partire da Environment.getRootDirectory()+dirName ma non mi permetteva di salvare i file (la root è /system)

Contatto così gli faccio correggere/rivedere il plugin

Comunque grazie mille, forse il tuo flusso  ??? molecolare-cerebrale si è sintonizzato sul mio e mi ha suggerito la soluzione mentre stavi pensando a come scrivere il post :) Stessa ora ... pazzesco  :D

Non "risolvo" ancora il topic, perché magari vuoi aggiungere altro :-)

Ciauz


Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Impossibile scrivere nel file system dell'emulatore/tablet: readonly fs
« Risposta #3 il: 18 Dicembre 2011, 12:33:13 CET »
0
Ahah! No, nient'altro da aggiungere. Per il salvataggio dei file qui c'è tutto developer.android.com/guide/topics/data/data-storage.html.
Per salvare file pubblici credo tu sia costretto ad usare l'external storage. Se invece non ti interessa che i dati siano accessibili da altre applicazioni, puoi anche usare l'internal storage.  ;-)

Offline stesic74

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    emulatore
  • Sistema operativo:
    Xp e Ubuntu 10.x(si aggiorna di continuo)
Re:Impossibile scrivere nel file system dell'emulatore/tablet: readonly fs
« Risposta #4 il: 18 Dicembre 2011, 13:34:04 CET »
0
ok, grazie ancora  :D

Offline MariFio

  • Utente junior
  • **
  • Post: 50
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google ideos
  • Sistema operativo:
    Mac OS X 10.5
Re:Impossibile scrivere nel file system dell'emulatore/tablet: readonly fs
« Risposta #5 il: 30 Dicembre 2011, 12:50:10 CET »
0
Salve ragazzi,
ho trovato questo post interessante e vicino al problema che ho al momento: chiedo il vostro aiuto.

L'argomento, come intuibile, è inerente alla memorizzazione di file su MEMORIA (interna e esterna)
La memorizzazione su memoria esterna (con sd Mounted) avviene correttamente ed ha successo.
E' chiaro che l'app sviluppata preveda, in caso di non presenza di una memoria SD, la memorizzazione dati in memoria interna.
Il problema e' il seguente:

Voglio creare una cartella in /sdcard (anche se non presente, viene generata ugualmente o /mnt/sdcard [equivalente] ). All'atto di creazione la funzione mkdir() restitutisce errore. Avevo sentito voci che la cartella sdcard è stata introdotta dalla versione 2.2 proprio per ovviare alla non presenza della sd e a memorizzare file di dominio pubblico da parte dell'app. Proprio non riesco a farla funzionare.

Ho provato le seguenti istruzioni:

Codice (Java): [Seleziona]
File dir=new File(Environment.getExternalFileStorage()+"/"+directoryName);

if(!dir.exists() && !dir.isFolder()) dir.mkdir();

Anche se la sd non è presente oppure presente, ma non montata, il percorso è esistente, ma nonostante cio' non ho i permessi in scrittura. Come posso creare ugualmente la cartella? avete soluzioni?