アプリが大きな JPG ファイルを保存できるフォルダーのパスを取得するにはどうすればよいですか? getExternalStorageDirectory() は、SD カードが存在する場合にのみ正常に機能しますが、SD が取り外された場合、またはハードウェアに SD カード スロットがない場合はどうなりますか。ありがとう
3 に答える
Contextの getFilesDir() メソッドを使用できます。コンテキストからメソッドを使用して、キャッシュ ディレクトリ、外部キャッシュ ディレクトリ、および外部ファイル ディレクトリを取得することもできます。アクティビティもコンテキストであるため、これらのメソッドを内部から使用できます。
getFilesDir() メソッドは、アプリケーションからのみファイルにアクセスでき、常に使用できるフォルダーを提供します。ただし、可能であれば、代わりにキャッシュ ディレクトリを使用する必要があります。こうすることで、システムのスペースが不足することを回避できます。
編集:
私の答え: ほとんどの場合、デバイスには SD カードまたは内蔵の外部ストレージが搭載されています。内蔵の場合も、外部ストレージと呼ばれます。外部ストレージがリムーバブル (SD カード) か組み込みかを確認するには、環境で isExternalStorageRemovable() を使用できます。基本的に、内部メモリには大きなファイルを配置しないでください。内部メモリに公開フォルダはありません。デバイスに外部ストレージがない場合、特定のことを実行できません。そのような単純な。したがって、外部ストレージがない場合の 1 つのオプションは、ユーザーにそのことを知らせ、カードを挿入するように依頼することです。このケースを処理する必要はありません。ユーザーに処理させてください。
あなたが求めた答え: Context オブジェクトのgetDir(String name, int mode)および/またはopenFileOutput(String name, int mode)を使用してみてください。モードには MODE_WORLD_READABLE または MODE_WORLD_WRITEABLE を使用してください。内部ストレージの使用も確認してください。
あなたは、すべての人のために存在するプラットフォームの意図的な制限に直面しています。
大きなJPGファイルを保存する場合、Phoneの内部メモリは非常に小さく、すべてが電話のパフォーマンスに影響するため、外部ストレージに保存することをお勧めします。
外部ディレクトリの存在を要求することも、内部ディレクトリに保存することもできます。両方を許可する場合は、外部ストレージが存在しない場合に適切なアクションを実行できるように、外部に何かを保存したことを示すフラグを内部スペースに保存することをお勧めします。