Android11 - Storage(ストレージ)の変更まとめ

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

codechachaCopyright ©2019 codechacha