9

SD メモリが挿入されていない Android デバイスを想像してみてください。独自の内部メモリのみ。

Environment.getExternalStorageDirectory()この場合、何が返ってくるかわかりません。

Null または永続的なデータ ストレージに有効な内部メモリ位置?

4

3 に答える 3

11

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);
}
于 2013-07-11T13:10:32.670 に答える
3

私の電話(Android 4.1)のcyanogenmodカーネルでは、SDカードが挿入されているかどうかに関係なく、Environment.getExternalStorageDirectory() 常に内部ストレージを返します。また、外付け SD カードをまったくサポートしていない携帯電話もあります (Google Nexus 4 など)。

全体として、結果は実装に依存し、内部ストレージまたは SD カードを再調整するこの呼び出しに依存することはできません。同様に、SD カードが存在しない場合の呼び出しの結果も実装に依存します (つまり、デバイスごとに異なります)。アプリの観点からは、アプリ データを永続化する場所として扱います。

于 2013-07-11T13:12:41.860 に答える
1

対象の実機によって異なります。一部 (Asus Nexus 7 や Samsung Galaxy S[1-3] など) は、内部メモリ フォルダーを送信します。他の一部のデバイスでは、null または空を返す場合があります。

多くのデバイスで試すことはできませんでしたが、私が見たところ、その方法は「メーカー依存の答え」であることがわかりました.

正式には、システム 1 ではないストレージを返す必要があります。(SDカードまたは内部コアメモリへの追加である内部「はんだ付けメモリ」)。

于 2013-07-11T13:12:03.043 に答える