22

繰り返しになりますが、以前に尋ねられて回答された質問に出くわしましたが、私の実装ではまだ機能していません。

メイン アクティビティのonCreateメソッドの開始時にgetExternalFilesDir(null)を呼び出しています。AVD で実行しても、電話 (Samsung Galaxy Plus) で実行しても、毎回 null が返されます。

はい、AndroidManifest.xml<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />に行があり、呼び出しを行う前に外部ストレージの状態を確認しており、マウントされています。

onCreate()メソッド内の最初の 3 行を次に示します。実際には、 super.onCreate()およびsetContentView()呼び出しの直後です。

String state = Environment.getExternalStorageState();
File extFiles = getExternalFilesDir(null);
File locFiles = getFilesDir();

したがって、これらの 3 行が実行されると、変数の値は次のようになります。

state == "mounted"
extFiles == null
locFiles == "/data/data/com.mypackage.name/files"

なぜこれが考えられるのか、誰にもアイデアがありますか?

- - -編集 - - -

だから私は別のアプローチを試みました。を使用するのではなく、使用しgetExternalFilesDir(null)てみましたFile basePath = new File(Environment.getExternalStorageDirectory(), "myAppName");

これは理想的ではなく、Android のドキュメントにgetExternalFilesDir(). 私は何か他のことを試さなければなりませんでしたが、それは私にとってはうまくいきませんでした。今回は関数が有効な File オブジェクトを返すため、上記の行の後の basePath のパスは/mnt/sdcard/myAppNameです。ここまでは順調ですね。DDMS で確認すると、/mnt/sdcardは存在しますが、 /mnt/sdcard/myAppNameは存在しないことがわかります。これは予想されることです。だから私は電話するboolean result = basePath.mkdirs();

しかし、これは false を返し、ファイル システムをチェックすると、myAppName サブフォルダーが作成されていないことが確認できます。DDMS を使用してフォルダーを手動で作成し、そこにファイルを配置すると、アプリケーションからそれらのファイルを読み取ることはできますが、そのフォルダーに何も書き込むことはできません。

助けてください!私は機知に富んでいます。

4

4 に答える 4

22

これは Android のドキュメントからのものです。

外部ストレージ上のアプリケーション ファイルを保持するディレクトリのパスを返します。外部ストレージが現在マウントされていないため、パスが存在することを確認できなかった場合は null を返します。利用可能になったら、このメソッドを再度呼び出す必要があります。

もう 1 つのオプションは、外部ストレージが利用可能かどうかを確認することです。

String state = Environment.getExternalStorageState();
File filesDir;

// Make sure it's available
if (Environment.MEDIA_MOUNTED.equals(state)) {
    // We can read and write the media
    filesDir = getExternalFilesDir(null);
} else {
    // Load another directory, probably local memory
    filesDir = getFilesDir();
}
于 2013-08-21T19:07:38.830 に答える
0

行を削除する

uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"   

AndroidManifest.xml

Eclipse の [Permission] タブで xml エディタを [Android Manifest Permissions] に切り替え、

uses-permission "android.permission.WRITE_EXTERNAL_STORAGE" 

いくつかのクリックで。

次に、アプリケーションを実行してみます。


eclipse (バージョン、状態、または設定の違いによる可能性があります) は、直接 xml で記述されたいくつかの単語を無視できるようAndroidManifest.xmlです。


アドバイスをありがとう。そうです、私の答えは世間話で同意するように見えました。

于 2013-11-23T06:32:55.237 に答える