Android11(R)のPreviewでStorage(ストレージ)の変更をまとめました。
今回のアップデートは、Android10のScoped Storageを補完したものがほとんどです。
追加された内容を簡単にまとめてみました。
Data migration
Android10で紹介したように、Android11をターゲットにしアプリはすべて Scoped Storage
が適用されます。
ただし、Android10以下のバージョンでAndroid11に更新されるアプリは、data migrationが必要な場合Legacyの保存方法を使用することができます。
しかし、デバイスに最初にインストールされているアプリは、適用にならないので、Scoped storage適用が避けられない。
Android11をターゲットにしてアプリに更新された場合に限って、Legacyの保存方法を使用するには、Appのmanifestに
preserveLegacyExternalStorage=true
に設定する必要があります。
ストレージ確認とcache削除
Android11でFileManagerのようなアプリが他のアプリのcacheを削除することができません。 代わりに、ユーザーに同意を得cacheを削除することができます。
ACTION_MANAGE_STORAGE
インテントを実行して、ストレージの空き容量を確認することができます- 保存スペースが不足している場合には、
ACTION_CLEAR_APP_CACHE
インテントを実行して、ユーザーの同意を得てcacheを削除することができます
追加されたMediaStore API
MediaStoreのAPIが追加されました。
次のAPIを使用して、ユーザーに特定の権限と機能を要求することができます。
- createWriteRequest():書き込み権限う
- createFavoriteRequest():メディアファイルをFavoriteに表示するように要求
- createTrashRequest():ゴミ箱にメディアファイルを捨てるように要求
- createDeleteRequest():メディアファイルを削除するように要求
(この部分は、コードにテストして再度更新します。)
Raw fileに直接アクセス
READ_EXTERNAL_STORAGE
権限があれば、デバイスのメディアファイルに直接アクセスが可能です。代わりにMediaStore APIよりも性能が落ちるので、可能であれば、MediaStore APIを使用するようにします。
(この部分は、コードにテストして再度更新します。)
ファイルのアクセス権の要求への変更
Android11をターゲットにしてアプリは ACTION_OPEN_DOCUMENT_TREE
インテントには、次のディレクトリへのアクセス許可を要求することができません。
- ダウンロード의ルートディレクター
- SD cardなどのストレージのroot director
Android11をターゲットにしてアプリは ACTION_OPEN_DOCUMENT_TREE
またはACTION_OPEN_DOCUMENT
インテントには、次のディレクトリとそのサブパスへのアクセス権を要求することができません。
Android/data/
とサブパス波Android/obb/
とサブパス波
パーミッションの名前を変更
Storage
パーミッションの名前はFiles & Media
に変更されます。また、パーミッションを要求するポップアップの内容が異なります。
意味のないパーミッション
Android11をターゲットにしてアプリの場合は、 WRITE_EXTERNAL_STORAGE
またはWRITE_MEDIA_STORAGE
は意味がありません。
パーミッションを取得しても権限の面でいくつかの利点はありません。
All Files Access権限
FileManagerまたはBackup&Restore機能を持っているアプリは、すべてのファイルへのアクセスが必要です。
このアプリは、次のようにユーザーに All Files Access
という権限を要求することができます。
- manifestに
MANAGE_EXTERNAL_STORAGE
権限を宣言します ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION
を実行して、ユーザーがアプリに権限を付与することができるページを浮かせることができます
All Files Access
権限を受信すると、次のファイルをアクセスすることができます。
- Shared storageのファイルの読み取り/書き込み権
- MediaStore.Filesテーブルのファイル接する
(この部分は、コードで確認して再度更新します。)
参考
Related Posts
- Android - FusedLocationProviderClientに位置情報を取得する
- Android - GPS、Network位置情報を取得する(LocationManager)
- Android - adbコマンドでActivity実行
- アンドロイド - MediaStoreにメディアファイルを保存する方法
- Android - Runtime permissionリクエスト方法と例(kotlin)
- Android11 - Storage(ストレージ)の変更まとめ
- Jetpack Compose - RowとColumn
- Android 13 - 細かいメディアファイルの権限
- Android 13でNotification権限をリクエスト、通知を表示する
- エラー解決:android gradle plugin requires java 11 to run. you are currently using java 1.8.
- Query method parameters should either be a type that can be converted into a database column or a List
- Android - TabLayoutの実装方法(+ ViewPager2)
- Android - adbコマンドで特定のパッケージのプロセスの終了
- Android - adb push、pullでファイルのコピー、ダウンロード
- Android - adbコマンドでsettings value確認、変更、
- Android 12 - IntentFilterのexported明示的な宣言
- Android - adb logcatコマンドでログ出力
- Android - ACTION_BOOT_COMPLETEDイベント受信
- Android - Foreground Service実行
- Android - ファイル入出力の例(Read、Write、内部、外部ストレージ)
- Android - アプリの権限を確認(Permission check)
- Android - adbで実行中のプロセス、スレッドリスト及びメモリ情報の確認
- Android - Broadcast Receiver登録およびイベントの受信方法
- Android - Cleartext HTTP ... not permitted例外解決方法
- Androidのビルドエラー - Calls to Java default methods are prohibited in JVM target 1.6
- アンドロイド - Assetsでファイルを読み取る方法
- アンドロイドのさまざまなNotification種類と実装方法
- アンドロイド - INSTALL_FAILED_TEST_ONLYエラー解決方法
- Android EspressoのCustom Matcher実装方法
- Android Espressoを使用してUIをテストする方法(3)
- アンドロイド - CTS hostsideをgradleで構築する方法
- Androidのアプリのデータフォルダーのパスと内部/外部ストレージ説明
- アンドロイド - 最初のApp作成
- Androidをインストールする方法(Windows)