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 gradle plugin requires java 11 to run. you are currently using java 1.8.
- Android - コルーチンとRetrofitによる非同期通信の例
- Android - コルーチンでURL画像を読み込む
- Android - 振動、Vibrator、VibrationEffectの例
- Some problems were found with the configuration of task
- Query method parameters should either be a type that can be converted into a database column or a List
- UbuntuでAndroid 12オープンソースをダウンロードしてビルド
- Android - ViewModelを生成する方法
- Android - Transformations.map(), switchMap() の違い
- Android-Transformations.distinctUntilChanged()소개
- Android - TabLayoutの実装方法(+ ViewPager2)
- Android - 携帯電話の電話番号を取得する方法
- Android 12 - Splash Screens
- Android 12 - インクリメンタルインストール
- Android - adbコマンドでbugreportログファイルの抽出
- Android - adbコマンドでAppデータを削除する
- Android - adbコマンドでアプリ無効化、有効化
- Android - adbコマンドで特定のパッケージのPIDを検索
- Android - adbコマンドでパーミッションGrantまたはRevoke
- Android - adbコマンドでapkのインストール、削除、
- Android - adbコマンドで特定のパッケージのプロセスの終了
- Android - adb push、pullでファイルのコピー、ダウンロード
- Android - adbコマンドでscreen capture保存
- Android - adbコマンドでSystemアプリの削除、インストール
- Android - adbコマンドでsettings value確認、変更、
- Android 12 - IntentFilterのexported明示的な宣言
- Android - adbコマンドで工場出荷時の(Factory reset)
- Android - adb logcatコマンドでログ出力
- Android - adbコマンドでメモリダンプ(dump-heap)
- Android - adbコマンドでApp強制終了(force-stop)
- Android - adbコマンドでServiceの実行、終了
- Android - adbコマンドでBroadcast配信
- Android - adbコマンドでActivity実行
- Android - PackageManagerにPackage情報を取得する
- Android - ACTION_BOOT_COMPLETEDイベント受信