Android dQパーティション格納権限の変更と適切な実装


パーティションメモリ
Android Qにパーティションストレージ機能が導入され、外部記憶装置では、各アプリケーションに対して「分離メモリサンドボックス」が提供される。他のアプリケーションはアプリケーションのサンドボックスファイルに直接アクセスできません。ファイルはアプリケーションのプライベートファイルなので、自分のファイルにアクセスしたり、保存したりする権限はもう必要ありません。この変更は、アプリケーションに必要な権限の数を減らすとともに、ユーザファイルのプライバシーを保証するために役立ちます。
権限変更
Android Qは、デバイスの外部記憶デバイス中のファイル(例えば:/sdcard)へのアクセスを変更しました。READ_を引き続き使用するEXTERNAL_STORAGEとWRITE_EXTERNAL_STORAGE権限は、これらの権限がある場合にのみメディアファイルにアクセスできます。他のファイルにアクセスできません。
以前のベータ版では、Androidは特定のメディア権限を申請する必要があります。MEDIA_IMAGES、READ_MEDIA_VIDEO、READ_MEDIA_AUDIOですが、beta 4ではこれらの権限は破棄されます。
プライベートファイルにアクセス
アプリケーションはアプリケーションのサンドボックスにファイルを保存する必要があります。このフォルダにアクセスする権限は必要ありません。公式の推奨アプリケーションは、サンドボックスにファイルを格納するアドレスがConttext.getExternal FilesDir()の下のフォルダです。
たとえば写真を得るために

Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
他のアプリケーションで作成したファイルにアクセスします。
次の二つの条件を満たす場合にのみ、あなたのアプリケーションは他のアプリケーションで作成されたファイルにアクセスできます。
1、あなたのアプリケーションはREAD_を獲得しました。EXTERNAL_STORAGE権限。
2、これらのファイルは以下のうちの明確に定義されたメディアセットの中にある:
写真:Media Store.Imagesに保存されています。
動画:Media Store.Videoに保存されます。
音楽ファイル:Media Store.Audioに保存されています。
他のファイル(「downloads」ディレクトリのファイルを含む)は、アクセスフレームを保存を使用しなければなりません。
注意:外部記憶装置のファイルにアクセスする際にフィルタリングビューに入るアプリケーションは、/sdcard/DCIM/IMG 1024.JPGなどの経路に対する直接カーネルアクセス権限を持っていません。このようなファイルにアクセスするには、Media Store.openFile()などの方法が必要です。
アンインストール後にアプリケーションのファイルを保持します。
ファイルはアプリケーションのプライベートディレクトリに保存されています。このアプリケーションをアンインストールすると、システムはアプリケーションのディレクトリのすべてのファイルをクリアします。これらのファイルをアンインストールして保存する場合がありますが、Media Storeの中のいずれかのディレクトリに保存してください。
パーティションの記憶を無効にする
Android Qデバイスには、パーティション記憶を有効にする2つの方法がある。
  • は、Android 9またはより低いバージョンをターゲットとするプラットフォーム(Target SDK<=28)
  • である。
  • Target SDK>28の場合は、manifestにandroid:request LegacyExternal Strage=「true」
  • を追加してください。
    これで既存のストレージポリシーを採用することができます。以上の方式は使用を勧めません。
    公式警告:来年は、すべてのアプリケーションの主要プラットフォームのバージョンがパーティションメモリを必要とします。どちらのターゲットを採用しても、SDKレベルです。
    ファイルアクセス権限の概要
    ファイルの位置
    必要なパーミッション
    アクセス方法
    アンインストール時にファイルを削除しますか?
    プライベートディレクトリを適用
    なし
    get External Files Dir()
    はい、
    メディア集合(写真、ビデオ、オーディオ)
    READ_EXTERNAL_STORAGE(他のアプリケーションのファイルにアクセスする場合のみ)
    メdia Store
    いいえ、
    ダウンロード内容(ドキュメントと電子書籍)
    なし
    アクセスフレーム(ロードシステムのファイル選択器)を保存します。
    いいえ、
    アクセスフレームを保存を使用して、パーミッションを要求することなく、前のテーブルに表示された位置にアクセスすることができます。
    特定ファイルアクセス
    メディアファイルを共有
    もしあなたのアプリが写真と動画の需要を共有しているなら。共有するファイルをMedia Storeを使って保存してください。
    セットにしたアプリケーション(例えば、ショートメールアプリケーションや個人情報アプリケーション)を提供する場合は、content:/URI ファイル共有の設定を使用してください。このワークフローは、セキュリティ最善のやり方として提案されている。
    文書を使う
    ビジネス文書を開くか、EPUBとして保存されている図書を開く必要がある場合。
    ACT ION_を呼び出しますOPENDOCUMENT intentは開くファイルを選択できます。intentはシステムのファイル選択アプリケーションを開きます。アプリケーションがサポートするタイプのファイルを表示します。intentにはIntent.EXTRA_MIME_TYPES extraを含む必要があります。
    GitHubのアクションアウトプット例はACT ION_uの使い方を説明しています。OPENDOCUMENTがファイルを開きます。
    メディアコンテンツのアクセスと変更
    以上で紹介しましたが、もう繰り返さないようにします。Media Storeを使う必要があります。
    他のアプリケーションのメディアファイルを更新します。
    Android Qは以前のアプリケーションは他のユーザーグループがアプリケーションディレクトリにアクセスする権限にあまり関心がなかったです。Android Qに適合すると、メーカーからユーザーグループに限定してストレージディレクトリにアクセスするように要求されます。
    他のアプリケーションを変更して外部記憶装置に保存する所与のメディアファイルは、プラットフォームから投げ出されたRecoverable SecurityExceptionをキャプチャしてください。その後、ユーザーに特定のコンテンツに対する書き込み権限を与えるように要求することができます。
    写真の位置情報
    私たちが撮った写真は主にExifメタデータに位置情報が含まれています。Android Q以前は画像の位置情報を簡単に入手できます。Android Qはあなたのアプリケーションに対してデフォルトでこのような情報を隠します。また、この位置情報の制限は、カメラ機能に適用される制限とは異なる。
    あなたのアプリケーションが写真の位置情報にアクセスする必要がある場合、以下の手順を実行してください。
    新しいACCESS_をMEDIA_LOCATION権限をアプリケーションリストに追加します。
    Media Storeオブジェクトでset Require Originalを呼び出し、呼び出し時に写真のURIに入る。
    
    val photoUri = MediaStore.setRequireOriginal(photoUri)
      contentResolver.openInputStream(photoUri).use { stream ->
        ExifInterface(stream).run {
          // If lat/long is null, fall back to the coordinates (0, 0).
          val latLong = ?: doubleArrayOf(0.0, 0.0)
        }
      }
    ここでは、Android dQパーティションの記憶権限の変更と適切な実装についての記事を紹介します。Android dQパーティションの記憶権限の変更については、以前の記事を検索したり、下記の関連記事を閲覧したりしてください。これからもよろしくお願いします。