web-dev-qa-db-ja.com

ストレージアクセスは、Android 6?

バックグラウンド

Androidには、SDカードとストレージの一般的な取り扱い方法に関して多くの変更がありました。

  • API 3-すべてのアクセス権があり、許可は必要ありません
  • API 4-15-WRITE_EXTERNAL_STORAGEを使用する必要があり、すべてのアクセスを取得します。
  • API 16-18-読み取りのみを行う場合は、READ_EXTERNAL_STORAGEを使用します
  • API 19-20-アプリがシステムアプリであるか、ルートを持っている場合を除き、セカンダリ外部ストレージ(SDカード)の読み取りまたは書き込みはできません。
  • API 21-22-SDカードにアクセスするには、ユーザーに許可を求め、File APIの代わりにDocumentFile APIを使用する必要があります。 herehere 、および - こちら

API 23(Android 6)以降、状況は再び変化しているようです...

問題

API 23には、少なくとも2つの新しいものとストレージ関連のものがあります。

  • " Adoptable Storage Devices "-ユーザーはオプションで、SDカードをプライマリ外部ストレージのようなものとして作成できます。
  • 新しい許可メカニズム (実行時に許可を要求する)の一部として、ストレージはユーザーが確認する必要がある許可でもあるようです。これはREAD_EXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGEの両方に対応しています

SDカードを搭載したAndroid 6デバイスは存在しないため、エミュレータ自体にはSDカードを使用する機能がないため、何が起こっているのかを知ることはまだ不可能です。

質問

  1. SDカードは、DocumentFileの代わりにFile-APIを使用してアクセスを取得しますか?

  2. すべての外部ストレージパス(SDカードを含む)へのアクセスが必要な場合、この許可を2回要求する必要があることを意味します。1つはプライマリ外部ストレージ用、もう1つはSDカード用です。

  3. 許可を手動で付与する前に、SDカード上のファイルに何らかの方法でアクセスできますか?

  4. ユーザーが「Adoptable Storage Devices」を使用することを選択したとします。アプリのファイルのパスを取得するさまざまな機能にとって、それはどういう意味ですか?例:getFilesDir、getExternalFilesDir、...?そのため、getExternalFilesDirsの順序は変更されますか?

  5. ユーザーがSDカードとの間でアプリを移動すると(「採用可能なストレージデバイス」を使用して)アプリのファイルはどうなりますか? SDカード上のアプリのファイルはどうですか?彼らは滞在しますか?または、彼らはどこかに移動しますか?

    たとえば、アプリのSDカードのパス「/ storage/extSdCard/Android/data/appPackageName」に「file1.txt」があり、ファイル「file2.txt」(または同じ名前)がある場合パス「/ storage/emulated/0/Android/data/appPackageName」のプライマリ外部ストレージ上。切り替え後、これらのファイルはどうなりますか?仮にあったとしても、それらはどのようにして単一のフォルダーにマージされますか?

  6. アプリをSDカードに移動するとき(「採用可能なストレージデバイス」を使用)、内部ストレージが使用されないことを意味しますか?

47

Adoptable Storage Devices関連する質問に答えてください:

  1. ユーザーが「Adoptable Storage Devices」を使用することを選択したとします。アプリのファイルのパスを取得するさまざまな機能にとって、それはどういう意味ですか?例:getFilesDir、getExternalFilesDir、...?そのため、getExternalFilesDirsの順序は変更されますか?

ユーザーが「Adoptable Storage Device」(内部フォーマット)としてSDカードを使用することを選択した場合、SDカードは内部ストレージとしてのみ使用可能になります。つまり、ダウンロードしたファイルを保存するSDカードは使用できません。関連するメソッドによって返されるパスの順序は変更されません。たとえば、ユーザーがSDカードを「Adoptable Storage Devices」としてフォーマットした場合、getExternalFilesDir()は外部ストレージパスのみをリストします。 SDカードのパスは使用できません。

  1. ユーザーがSDカードとの間でアプリを移動すると(「採用可能なストレージデバイス」を使用して)アプリのファイルはどうなりますか? SDカード上のアプリのファイルはどうですか?彼らは滞在しますか?または、彼らはどこかに移動しますか?たとえば、アプリのSDカードのパス「/ storage/extSdCard/Android/data/appPackageName」に「file1.txt」があり、ファイル「file2.txt」(または同じ名前)がある場合パス「/ storage/emulated/0/Android/data/appPackageName」のプライマリ外部ストレージ上。切り替え後、これらのファイルはどうなりますか?仮にあったとしても、それらはどのようにして単一のフォルダーにマージされますか?

ユーザーが自分のSDカードを「Adoptable Storage Devices」として選択する場合、ユーザーは"Format as internal"オプションを使用して、SDカードを内部ストレージとしてフォーマットする必要があります。フォーマットは、SDカードに保存されているすべてのデータ/ファイルが消去されることを意味します。同様に、ユーザーが「Adoptable Storage Devices」からSDカードを削除したい場合、ユーザーは再び"Format as portable"オプションを使用してSDカードをポータブルストレージとしてフォーマットする必要があります。

  1. アプリをSDカードに移動するとき(「採用可能なストレージデバイス」を使用)、内部ストレージが使用されないことを意味しますか?

はい、元の内部ストレージは使用されません。 SDカードを「Adoptable Storage Devices」として選択したため、SDカードストレージのみが使用されます。すべてのデータ/キャッシュはSDカードに保存されます

10
VicJordan

質問5に回答するには:Android 7、「パブリックデータ」領域のすべてのファイル、/storage/emulated/0/(またはメーカー固有の場所。DCIMDownloadsなどを含むディレクトリ)は、完全に内部メモリに保存されるか、採用されたSDカードに保存されます。採用されたSDカードの初期フォーマットの後、ユーザーには「データを移行」する機会が提示され、_/storage/emulated/0 SDカードに。ユーザーはいつでもSettings/Storageに移動して、現在パブリックデータエリアを保持していないストレージエリアを選択し、(3つの縦のドット)右上のアイコンをクリックして、[データの移行]オプションのメニューを表示します。

採用されたカードが使用中の場合、ユーザーまたはアプリケーションが特定の公開ファイルをSDカードに強制する方法はないようです。それはすべてか無かです。 (アプリのプライベートストレージは、アプリがSDカードに移動されたかどうかに基づいて、内部ストレージまたはSDカードにあります。アプリも両方ではなく、どちらか一方のみを使用するようです。 )

1
Curt J. Sampson