SD メモリが挿入されていない Android デバイスを想像してみてください。独自の内部メモリのみ。
Environment.getExternalStorageDirectory()
この場合、何が返ってくるかわかりません。
Null または永続的なデータ ストレージに有効な内部メモリ位置?
SD メモリが挿入されていない Android デバイスを想像してみてください。独自の内部メモリのみ。
Environment.getExternalStorageDirectory()
この場合、何が返ってくるかわかりません。
Null または永続的なデータ ストレージに有効な内部メモリ位置?
public static File getExternalStorageDirectory()
API レベル 1 で追加
Android 外部ストレージ ディレクトリを取得します。このディレクトリは、ユーザーがコンピュータにマウントした場合、デバイスから削除された場合、またはその他の問題が発生した場合、現在アクセスできない可能性があります。getExternalStorageState() で現在の状態を確認できます。
注: ここで「外部」という言葉を混同しないでください。このディレクトリは、メディア/共有ストレージと考えるとよいでしょう。これは、比較的大量のデータを保持できるファイルシステムであり、すべてのアプリケーションで共有されます (権限を強制しません)。従来、これは SD カードですが、保護された内部ストレージとは別のデバイスに内蔵ストレージとして実装され、コンピュータにファイルシステムとしてマウントできる場合もあります。
機種によって違うと思います。
内部ストレージ メモリのパスであるSamsung Galaxy S3Environment.getExternalStorageDirectory()
が返品されました。sdCard0
より詳しい情報 @
http://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()
以下はお勧めしません。これについて Commonsware と話し合いましたが、アドバイスは以下を使用しないことでした。ただし、テスト目的で以下を使用できます。
String externalpath = new String();
String internalpath = new String();
public void getExternalMounts() {
Runtime runtime = Runtime.getRuntime();
try {
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
if (line.contains("secure")) continue;
if (line.contains("asec")) continue;
if (line.contains("fat")) {//external card
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
externalpath = externalpath.concat("*" + columns[1] + "\n");
}
}
else if (line.contains("fuse")) {//internal storage
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
internalpath = internalpath.concat(columns[1] + "\n");
}
}
}
}
catch(Exception e) {
e.printStackTrace();
}
System.out.println("Path of sd card external............"+externalpath);
System.out.println("Path of internal memory............"+internalpath);
}
私の電話(Android 4.1)のcyanogenmodカーネルでは、SDカードが挿入されているかどうかに関係なく、Environment.getExternalStorageDirectory()
常に内部ストレージを返します。また、外付け SD カードをまったくサポートしていない携帯電話もあります (Google Nexus 4 など)。
全体として、結果は実装に依存し、内部ストレージまたは SD カードを再調整するこの呼び出しに依存することはできません。同様に、SD カードが存在しない場合の呼び出しの結果も実装に依存します (つまり、デバイスごとに異なります)。アプリの観点からは、アプリ データを永続化する場所として扱います。
対象の実機によって異なります。一部 (Asus Nexus 7 や Samsung Galaxy S[1-3] など) は、内部メモリ フォルダーを送信します。他の一部のデバイスでは、null または空を返す場合があります。
多くのデバイスで試すことはできませんでしたが、私が見たところ、その方法は「メーカー依存の答え」であることがわかりました.
正式には、システム 1 ではないストレージを返す必要があります。(SDカードまたは内部コアメモリへの追加である内部「はんだ付けメモリ」)。