3

次のコードを使用してSDカードが使用可能かどうかを確認しますが、Android4.x以降を実行するSamsungGalaxy IIおよびNoteデバイスでは、実際にはデバイスにSDカードがない場合でも、OSはSDカードの使用をシミュレートします。

private boolean isSDCardAvailable() {
    return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
}

SDカードが利用可能な場合は、getExternalCacheDir()を呼び出してディレクトリを取得します。それ以外の場合は、ユーザーにエラーを表示し、getCacheDir()を呼び出して内部ストレージを使用します。

上記の方法では、SDカードがない場合でも、TRUEとすべてのデバイスが返されます。

4

2 に答える 2

5

このメソッドは API レベル 11 以降で利用可能であり、内部メモリが外部ストレージとして機能しているかどうかを知らせます。一部のデバイスでgetExternalStorageDirectory()は、SD カードが利用できない場合でも true を返します。詳細については、以下のドキュメントをお読みください。

public static boolean isExternalStorageEmulated ()

API レベル 11 で追加

エミュレートされた外部ストレージ デバイスがデバイスにあるかどうかを返します。true の場合、デバイスには実際の外部ストレージがなく、getExternalStorageDirectory() によって返されるディレクトリは、内部ストレージ システムの一部を使用して割り当てられます。

パッケージ マネージャーなどの特定のシステム サービスは、これを使用してアプリケーションのインストール先を決定します。

エミュレートされた外部ストレージも暗号化される場合があります。詳細については、setStorageEncryption(android.content.ComponentName, boolean) を参照してください。

Android ドキュメント

于 2013-02-05T21:07:30.550 に答える
0
boolean mExternalStorageAvailable;
boolean mExternalStorageWriteable;

private void checkExternalMedia() {
    mExternalStorageAvailable = false;
    mExternalStorageWriteable = false;
    String state = Environment.getExternalStorageState();

    if (Environment.MEDIA_MOUNTED.equals(state)) {
        mExternalStorageAvailable = mExternalStorageWriteable = true;
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        mExternalStorageAvailable = true;
        mExternalStorageWriteable = false;
    } else {
        mExternalStorageAvailable = mExternalStorageWriteable = false;
    }
}
于 2013-02-05T21:17:30.807 に答える