-1

SDカードに一時ファイルを保存するアプリを作ろうとしています。

ユーザーがSDカードを持っていない場合、アプリケーションでファイルを内部ストレージに保存したい

私の英語でごめんなさい。

4

2 に答える 2

4

これは、SD カードまたは内部ストレージのキャッシュに使用するものですが、注意が必要です。特に内部ストレージでは、キャッシュを定期的にクリアする必要があります。

private static boolean sIsDiskCacheAvailable = false;
private static File sRootDir = null;

public static void initializeCacheDir(Context context){
    Context appContext = context.getApplicationContext();

    File rootDir = null;

    if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
        // SD card is mounted, use it for the cache
        rootDir = appContext.getExternalCacheDir();
    } else {
        // SD card is unavailable, fall back to internal cache
        rootDir = appContext.getCacheDir();

        if(rootDir == null){
            sIsDiskCacheAvailable = false;
            return;
        }
    }

    sRootDir = rootDir;

    // If the app doesn't yet have a cache dir, create it
    if(sRootDir.mkdirs()){
        // Create the '.nomedia' file, to prevent the mediastore from scanning your temp files
        File nomedia = new File(sRootDir.getAbsolutePath(), ".nomedia");
        try{
            nomedia.createNewFile();
        } catch(IOException e){
            Log.e(ImageCache.class.getSimpleName(), "Failed creating .nomedia file!", e);
        }
    }

    sIsDiskCacheAvailable = sRootDir.exists();

    if(!sIsDiskCacheAvailable){
        Log.w(ImageCache.class.getSimpleName(), "Failed creating disk cache directory " + sRootDir.getAbsolutePath());
    } else {
        Log.d(ImageCache.class.getSimpleName(), "Caching enabled in: " + sRootDir.getAbsolutePath());

        // The cache dir is created, you can use it to store files
    }
}
于 2013-01-03T14:27:56.403 に答える
0

Context の getExternalCacheDir() メソッドを使用して、SD カードにファイルを保存できる File 参照を取得できます。もちろん、通常どおり、外部ストレージがマウントされ、書き込み可能であることを確認するために、通常のチェックを行う必要がありますが、おそらく、このタイプの一時ファイルを保存するのに最適な場所です。やりたいことの 1 つは、キャッシュ ディレクトリで使用できる最大容量を設定することです。その後、新しい一時ファイルを書き込む必要があるときはいつでも、そのファイルが最大容量を超えた場合は、そのファイルの削除を開始します。十分なスペースができるまで、最も古いものから始めて一時ファイルを削除します。あるいは、次のようなものがうまくいくかもしれません:

 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File externalRoot = Environment.getExternalStorageDirectory();
File tempDir = new File(externalRoot, ".myAppTemp");
 }

「。」を先頭に追加します。フォルダを非表示にする必要があります、私はかなり確信しています。

于 2013-01-03T14:20:14.820 に答える