web-dev-qa-db-ja.com

Androidのデータディレクトリには読み取り/書き込み権限がありません

Android 1.5を使用しています。データディレクトリに読み取り/書き込み権限がありません

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

したがって、データディレクトリのアクセス許可を提供する方法を教えてください。

私がやろうとしていることは、ファイルを作成し、以下のようにエミュレータのデータストレージにコンテンツを追加することです

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

あなたはデータディレクトリを見るべきではありません。これは電話のストレージにあるシステムディレクトリであり、通常は_/data_であり、アプリケーションに書き込み権限はありません。

アプリケーションがファイルを書き込む必要があるディレクトリは、 Context.getFilesDir() method によって返されます。 _/data/data/com.yourdomain.YourApp/files_のようになります。

電話のストレージ内のファイルに書き込みたい場合は、 Context.openFileOutput() method を使用します。

SDCardへのパスが必要な場合は、 Environment.getExternalStorageDirectory() method を使用します。 SDCardに書き込むには、マニフェストに以下を追加して、アプリケーションに適切なアクセス許可を与える必要があります。

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

SDCardに書き込む場合は、getExternalStorageState()メソッドを使用してその状態を確認する必要もあります。

アプリケーションで行う小さなファイルを保存している場合、これらはSDカードではなく携帯電話のストレージに入る可能性があるため、Context.openFileOutput()およびContext.openFileInput()メソッドを使用します。

したがって、コードでは次のようなことを考慮します。

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