ファイル ストレージに関連するドキュメントに最も近いのはこの投稿(アクセスできない場合は以下を参照) ですが、いくつか疑問が残ります。
ここで、どのパスがどのストレージにマップされているか、どのようにハードコードする必要があるか、どのくらい正確にアクセスする必要があるかを見て、本当に、本当に、本当に本当に知りたい. 実際のコード サンプルは最高です。これをいじってからの私の最善の推測は次のとおりです。
- /sdcard-> は内部 eMMC スロットにマップされ、アクセスが制限されます。Environment.getExternalStorageDirectory(); ...まだこれを返します。
- /media -> 内部 8GB メモリにマップします (これに書き込むことができます)
- /データ -> ?
- ? -> オプションの microSD カードにマッピング
/sdcard が代わりに制限付きストレージにマップされている場合、外部 (オプション、追加、ポップアウトできるもの) SD カードにアクセスするにはどうすればよいですか?
ここで、Nook 開発者ドキュメントを引用します。
背景 現在市場に出回っている NOOK Color デバイスには 2 つの異なるパーティション スキームがあり、1 つは /data パーティションのアプリケーションで 250MB しか使用できず、もう 1 つは /data パーティションのアプリケーションで 4GB を使用できます。その結果、スペースを効果的に管理するような方法でアプリケーションを設計および開発することが不可欠です。ご記入いただけない場合は、ショップでの配布はお受けできません。
アプリケーションが大量のデータ (画像、オーディオ、またはビデオ コンテンツを含むがこれらに限定されない) を必要とする場合は、実行時にそれらのリソースをダウンロードし、デバイスのより大きなパーティションに保存する必要があります。アプリケーションが 100MB を超えるデータまたはリソースを要求して保存する場合は、次の制限に従う必要があります。
大量のデータがアプリケーションによって使用/配信される場合、アプリケーションは説明に明確かつ明示的に記載する必要があります。リソースとデータを適切なパーティションに書き込む必要があります。次のように、デバイスの /data パーティションが拡大されているかどうかを検出できます。
StatFs stat = new StatFs("/data"); long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount(); long megAvailable = bytesAvailable / 1048576; if (megAvailable > 1000){ ... write your resources in /data } else { ... write your resources on /mnt/media ... }
/data 上のアプリケーションのプライベート スペースにデータを書き込むには
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_WORLD_READABLE);
アプリケーションは、デバイスに SD カードが存在することを前提とすべきではありませんが、次の呼び出しを介してテストできます。
Environment.getExternalStorageState(); SD カードが見つからない場合、アプリケーションは正常に終了し、終了の理由をユーザーに通知する必要があります。
/media パーティションと ExternalStorage にアクセスするには、マニフェストで宣言する必要があることに注意してください。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"> </uses-permission>