Android ストレージの概要
ストレージは私たち全員が認識しているものですが、常に当然のことと考えています。少し前まで、ストレージ容量のあらゆる飛躍は漸進的であり、不可能に思えました。今日では、私たちのデバイスがどれだけの機能を備えているかを考えるとき、私たちは再考することはありません (そして、その違いを気にすることはできませんでした)。
より大きなポイントは、メモリに格納されているものの進化を見ることです。スマートフォンが登場する前は、時折の写真や 2 枚の写真、いくつかのゲーム、大量のテキスト メッセージを保存していました。しかし今では、標準的な電話には、アプリケーション、ドキュメント、写真、ビデオ、音楽ファイルなどの組み合わせが含まれています。デバイスのストレージ スペースをアプリケーションに利用する方法を見てみましょう。
この記事で取り上げる内容は次のとおりです。
<オール>各アプリケーションは、次の 2 種類のストレージにアクセスできます:内部 および 外部 .これら 2 種類のストレージには大きな違いがあり、それらを知っておくと、次のアプリケーションを設計するときに役立ちます。
始める前に、ストレージとキャッシュについて 1 つのことを言わなければなりません。ストレージは永続的に保存したいものを対象としていますが、キャッシュは一時的に保存するためにあります。
内部ストレージ
各アプリケーションがオペレーティング システムで実行されると、独自の内部ストレージがあります。このストレージは非公開であり、アプリケーションの使用のみを目的としています。つまり、他のアプリケーションもユーザーもアクセスできません。内部ストレージを使用する際に留意すべきもう 1 つの点は、その可用性です。外部ストレージとは異なり、内部ストレージは常にアプリケーションで利用できます。
ただし、このストレージの使用には欠点があります。ユーザーがアプリケーションを削除すると、アプリの内部ストレージに保存されているすべてのデータも削除されます。携帯電話にゲームをインストールした後、どこかでそれを削除することにしたとしたらどうなるか想像してみてください。万が一ゲームを再インストールする場合は、ゲームの進行状況を保存したいと考えています。
では、ファイルを内部ストレージに保存するにはどうすればよいでしょうか?
public void saveFileInternalStorage() {
String FILENAME = "hello_world_file";
String inputToFile = "Hello From Internal Storage!";
try {
FileOutputStream fileOutputStream = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fileOutputStream.write(inputToFile.getBytes());
fileOutputStream.close();
Toast.makeText(getApplicationContext(),
"File " + FILENAME + " has been saved successfully",
Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),
"File " + FILENAME + " has not been saved successfully due to an exception " + e.getLocalizedMessage(),
Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),
"File " + FILENAME + " has not been saved successfully due to an exception " + e.getLocalizedMessage(),
Toast.LENGTH_SHORT).show();
}
}
コード例でわかるように、hello_world_file という名前のファイルを保存しています。 テキスト 「Hello From Internal Storage!」 を含む .これを実行しようとしたときに発生する可能性のある例外を示すために 2 つの catch 句を作成しましたが、一般的な Exception オブジェクトを使用してそれらを 1 つの catch 句に最小限に抑えることができます。
メソッド openFileOutput に注意してください。 ファイルが既に存在する場合は開きますが、存在しない場合は作成します。このメソッドの 2 番目のパラメーターはファイル モードです。このパラメーターは、ファイルのスコープとそのファイルへのアクセスを指定します。デフォルト値は MODE_PRIVATE で、アプリケーションのみがファイルにアクセスできるようにします。
このパラメーターの他の 2 つの値は MODE_WORLD_READABLE と MODE_WORLD_WRITEABLE ですが、API 17 以降では非推奨になっています。プライベート ファイルを他のアプリケーションと共有するには、別のロジック セットを使用します。詳細については、こちらを参照してください。最後に、ファイルに書き込むときに、文字列をバイトに変換し、最後にファイルを閉じるようにします。
外部ストレージ
名前が示すものとは反対に、これは常にアクセスできるとは限らないという事実によって定義されるストレージです。これは、外部 SD カード (セカンダリ外部ストレージ) である可能性があることを意味しますが、デバイス上にあるストレージ (プライマリ外部ストレージ) である可能性もあります。
外部ストレージとは、デバイスを USB ケーブルでコンピュータに接続したときにアクセスできるストレージのことです。ご想像のとおり、このタイプのストレージに保存されているものはすべて、デバイス上の他のアプリケーションからアクセスできますが、アプリケーションをアンインストールしても保持されます.
ファイルを外部ストレージに保存する方法を示す前に、次の 2 つのことを行う必要があります。
<オール>十分なストレージ容量があることを確認するには、次のコード行が必要です:
//Check if you can read/write to external storage
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
外部ストレージにアクセスするには、次の権限を AndroidManifest.xml に追加する必要があります:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
さらに、API 23 以降、危険なパーミッションはインストール時ではなく実行時に許可されます。外部ストレージへの書き込みは 1 つに分類されるため、ユーザーがアプリケーションのアクセス許可を付与するかどうかを決定できるようにするロジックを追加する必要があります。
public void saveFileExternalStorage(View view) {
if (isExternalStorageWritable()) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) ==
PackageManager.PERMISSION_GRANTED) {
writeFileToExternalStorage();
} else{
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 0:
{
writeFileToExternalStorage();
break;
}
}
}
writeFileToExternalStorage 次のようになります:
public void writeFileToExternalStorage() {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/saved_files");
if (!myDir.exists()) {
myDir.mkdirs();
}
try {
File file = new File(myDir, "myfile.txt");
FileOutputStream out = new FileOutputStream(file);
out.write(inputToFile.getBytes());
out.close();
Toast.makeText(getApplicationContext(),
"File myfile.txt" + " has been saved successfully to external storage",
Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
ここに示されているすべてのコードの例を見たい場合は、この GitHub リポジトリにアクセスしてください。
知っておくと便利
上記は、アプリケーションのさまざまなタイプのストレージを操作する方法の 2 つの簡単な例です。システムが管理するリソースを扱っているため、それに関連する動作にも注意する必要があります。
デフォルトでは、アプリケーションは内部ストレージにインストールされます (internalOnly の説明を参照 )、ただし API レベル 8 以降では、属性 installLocation を追加できます 、アプリケーションを外部ストレージにインストールできるマニフェストに追加します。そうする理由の 1 つは、アプリケーションが非常に大きく、ユーザーがデバイスの外部ストレージにインストールすることを好む場合です。そこにはより多くのスペースがあるからです。
この属性には 3 つの値があります:
- 自動 - アプリケーションをインストールする特定の設定がないことを意味します。アプリケーションは内部ストレージにインストールしようとしますが、いっぱいの場合は外部ストレージにインストールされます
- internalOnly - アプリケーションは内部ストレージにのみインストールされ、そこに十分なスペースがない場合はインストールされません
- preferExternal - アプリケーションを外部ストレージにインストールすることを意味しますが、そこに十分なスペースがない場合は内部にインストールされます
auto オプションと preferExternal オプションの両方で、ユーザーはアプリケーションを外部ストレージから内部ストレージに、またはその逆に移動するオプションがあります。
ユーザーが自分のデバイスをコンピューターに接続し、データを共有できるようにするか、SD カードをアンマウントすると、外部ストレージから実行されているすべてのアプリケーションが破棄されることに注意してください。アプリケーションが次の機能のいずれかを使用している場合、外部ストレージにインストールしないでください:
各種サービス (警報サービス s 特に)、入力方式エンジン、ライブ壁紙、アプリケーション ウィジェット、アカウント マネージャー、同期アダプター、デバイス管理者、およびブート完了をリッスンするブロードキャスト レシーバー。
-
Android で .estrongs を使用する方法
ファイル マネージャー アプリケーションは、Android フォンでファイルやフォルダーを管理するのに便利です。フォルダーの作成、編集、およびある場所から別の場所への移動から、不要なデータの削除まで、ファイル マネージャーはあらゆる面で役に立ちます。 ES ファイル エクスプローラーは、ファイル作業を便利に実行できることから非常に人気のあるアプリケーションの 1 つです。 ES ファイル エクスプローラーには複数の組み込みフォルダーがあり、.estrongs はその 1 つです。この隠しフォルダーについて疑問がある場合は、Android の estrongs について知っておくべき適切な場所に
-
ファイル マネージャは Android フォンのストレージを管理するのに十分か
標準の Android OS または Android オープン ソース プロジェクトに基づくサードパーティのオペレーティング システムを搭載したすべての Android スマートフォンには、ファイル マネージャー アプリが組み込まれています。 File Manager アプリが事前にインストールされていない場合、ユーザーはいつでも PlayStore にアクセスして、サードパーティのファイル エクスプローラーの代替手段をダウンロードして作業を行うことができます。 ファイルマネージャーは、携帯電話に保存されているすべてのファイル/フォルダーの概要を取得し、ストレージの使用状況を監視できる場所で