一部の電話では、ドキュメントが示唆しているように、外部という言葉はあまり深刻に受け止めるべきではありません。
注:ここで「外部」という言葉を混同しないでください。このディレクトリは、メディア/共有ストレージと考えるとよいでしょう。これは、比較的大量のデータを保持できるファイル システムであり、すべてのアプリケーションで共有されます (権限を強制しません)。
従来、これは SD カードですが、保護された内部ストレージとは別のデバイスに内蔵ストレージとして実装され、コンピュータにファイルシステムとしてマウントできる場合もあります。
-methodを使用して、ストレージが本当に外部にあるかどうかを確認できます。削除できない場合は、いつでも書き込みできるはずです (アクセス許可が宣言されている場合)。Environment.isExternalStorageRemovable()
ただし、取り外し可能な場合は、現在の状態を で確認する必要がありますEnvironment.getExternalStorageState()
。これを使用する方法の簡単な例を次に示します。
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
// We can read and write!
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// Mounted read only...
} else {
// Something is wrong...
}
したがって、これらの場合は、外部ストレージに書き込むことができます。
重要: ドキュメントが複数のポイントで指定しているように、上記の方法はプライマリ外部ストレージに対して機能します。一部のデバイス (Motorola Xoom など) には、内部「外部」ストレージと SD カードの両方があります。
そのようなデバイスの「セカンダリ外部ストレージ」にアクセスする「一般化された」方法はないようですが、現在は Android 4.2 で導入された標準があります。
デバイスには外部ストレージの複数のインスタンスが含まれる場合がありますが、
現在、API を介して開発者に公開されているのはプライマリ外部ストレージのみです。
[...]
Android 4.2 以降、デバイスは複数のユーザーをサポートできるようになり、
外部ストレージは次の制約を満たす必要があります。
- [...]
- セカンダリ外部ストレージは、アプリによって書き込み可能であってはなりません。
どのストレージ (内部または実際の外部) がプライマリと見なされるかは、ベンダーによって異なるようです。ここでできることはあまりありません (物事が混乱することなく...)
外部ストレージが存在しない場合は、保存するデータの種類に応じて、アプリケーションのInternal Storageまたは caching ディレクトリを使用できます。