1

バックアップ機能を備えたアプリを開発しています。機能を正常に実装しましたが、まだ問題が発生している領域は次の 1 つだけです...

外部ストレージの可用性を確認するには、次の関数を使用して SD カードが表示されていることを確認します。

一部の Android モデルの携帯電話には、内部メモリしかありません。そのような場合、どのように問題を処理すると思いますか。

public static boolean isExternalStorageWritable(){
    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED.equals(state)){
        return true;
    }
    return false;
}

public static boolean isExternalStorageReadable(){
    String state = Environment.getExternalStorageState();
    if(Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
        return true;
    }
    return false;
} 

また、これにより DCIM フォルダーの場所が返されることも認識していますが、重要なバックアップ ファイルを保存するのに最適な場所ではないと思います。

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)

誰かがすでにこの問題の先駆者でしたか?

4

2 に答える 2

1
public class CheckStorage {
    /* Checks if external storage is available for read and write */
    static public boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            return true;
        }
        return false;
    }

    static public boolean isExternalStorageReadable() {
        if (CheckStorage.isExternalStorageWritable()) {
            return true;
        }
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
            return true;
        }
        return false;
    }
}
于 2014-08-18T22:32:12.933 に答える
0

Environment.getExternalStorageState()との両方が、 SD カードへのパスを返しませんEnvironment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)

API レベル 19より前では、SD カードに保存する公式の方法はありませんでした。しかし、多くの人は非公式の API を使用してそれを行うことができます。

正式にはContext、API レベル 19 (Android バージョン 4.4 - Kitkat) のクラスに 1 つのメソッドが導入されました。

File[] getExternalFilesDirs (String type)

アプリケーションが所有する永続ファイルを配置できるすべての共有/外部ストレージ デバイス上のアプリケーション固有のディレクトリへの絶対パスを返します。これらのファイルはアプリケーションの内部にあり、通常はメディアとしてユーザーに表示されません。

つまり、Micro SD カードと内部メモリの両方へのパスが返されます。通常、2 番目に返されるパスは、マイクロ SD カードのストレージ パスです。

外部ストレージの可用性を確認するには、次の関数を使用して SD カードが表示されていることを確認します。

SDカードが利用可能かどうかを確認するには、使用する必要がありますgetExternalStorageState(File)

公式の Android リファレンス ドキュメントには、

リムーバブル メディアはユーザーが取り出すことができるため、共有ストレージが常に利用できるとは限りません。メディアの状態は、 を使用して確認できます getExternalStorageState(File)

詳細については、次のリンクを参照してください: getExternalFilesDirs(java.lang.String)

上記の両方のメソッドが SD カードへのパスを返さない場合、これらのメソッド名に外部という用語が含まれているのはなぜだと思うかもしれません。

なぜなら、Android公式ドキュメント/ガイドによると、外部ストレージは内部メモリとmicroSDカードストレージの両方を意味するからです。

それ自身の言葉で、

外部ストレージには、リムーバブル ストレージ メディア (SD カードなど) または内部 (リムーバブルではない) ストレージを使用できます。

Google/Android の公式ドキュメントによると、内部および外部ストレージの用語は、私たちが考えているものとはかなり異なります。

于 2016-08-04T07:29:26.850 に答える