SDカードに一時ファイルを保存するアプリを作ろうとしています。
ユーザーがSDカードを持っていない場合、アプリケーションでファイルを内部ストレージに保存したい
私の英語でごめんなさい。
SDカードに一時ファイルを保存するアプリを作ろうとしています。
ユーザーがSDカードを持っていない場合、アプリケーションでファイルを内部ストレージに保存したい
私の英語でごめんなさい。
これは、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
}
}
Context の getExternalCacheDir() メソッドを使用して、SD カードにファイルを保存できる File 参照を取得できます。もちろん、通常どおり、外部ストレージがマウントされ、書き込み可能であることを確認するために、通常のチェックを行う必要がありますが、おそらく、このタイプの一時ファイルを保存するのに最適な場所です。やりたいことの 1 つは、キャッシュ ディレクトリで使用できる最大容量を設定することです。その後、新しい一時ファイルを書き込む必要があるときはいつでも、そのファイルが最大容量を超えた場合は、そのファイルの削除を開始します。十分なスペースができるまで、最も古いものから始めて一時ファイルを削除します。あるいは、次のようなものがうまくいくかもしれません:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File externalRoot = Environment.getExternalStorageDirectory();
File tempDir = new File(externalRoot, ".myAppTemp");
}
「。」を先頭に追加します。フォルダを非表示にする必要があります、私はかなり確信しています。