web-dev-qa-db-fra.com

Le répertoire de données n'a aucune autorisation de lecture / écriture dans Android

J'utilise Android 1.5 mon répertoire de données n'a pas les autorisations de lecture/écriture

System.out.println("DAta can write??--->"+Environment.getDataDirectory().canWrite());
System.out.println("DAta can read??--->"+Environment.getDataDirectory().canRead());

Veuillez donc me suggérer comment fournir des autorisations pour le répertoire de données.

Ce que j'essaie de faire est de créer un fichier et d'y ajouter du contenu dans le stockage de données de l'émulateur comme ci-dessous

private void writeToSDCard() {
        try {

            File lroot = Environment.getDataDirectory();

            if (lroot.canWrite()){
                File lfile = new File(lroot, "samplefile.txt");
                FileWriter lfilewriter = new FileWriter(lfile);
                BufferedWriter lout = new BufferedWriter(lfilewriter);
                lout.write("XXXXXXXXXXXXXXXXXX");
                lout.close();
            }
        } catch (IOException e) {
            Log.e(m_cTAG, "Could not write file " + e.getMessage());
        }
    }
22

Vous ne devriez pas regarder le répertoire de données. Il s'agit d'un répertoire système dans la mémoire du téléphone - généralement /data - et votre application n'aura jamais la permission d'y écrire.

Le répertoire dans lequel votre application doit écrire les fichiers est retourné par la méthode Context.getFilesDir() . Ce sera quelque chose comme /data/data/com.yourdomain.YourApp/files.

Si vous souhaitez écrire dans un fichier dans la mémoire du téléphone, utilisez la méthode Context.openFileOutput() .

Si vous voulez le chemin vers la carte SD, utilisez alors méthode Environment.getExternalStorageDirectory() . Pour écrire sur la carte SD, vous devrez donner à votre application les autorisations appropriées en ajoutant les éléments suivants à votre manifeste:

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

Si vous allez écrire sur la carte SD, vous devrez également vérifier son état avec la méthode getExternalStorageState().

Si vous stockez de petits fichiers liés à votre application, ceux-ci peuvent aller dans le stockage du téléphone et non sur la carte SD, utilisez donc les méthodes Context.openFileOutput() et Context.openFileInput().

Donc, dans votre code, considérez quelque chose comme:

OutputStream os = openFileOutput("samplefile.txt", MODE_PRIVATE);
BufferedWriter lout = new BufferedWriter(new OutputStreamWriter(os));
70
Dave Webb