簡體   English   中英

Android 范圍存儲 (10+) 從圖庫中挑選

[英]Android Scoped Storage (10+) Cross-Profile Pick From Gallery

根據最近的 Google Play 裁決,如果目標是 11+,則必須刪除舊存儲訪問權限。

我找不到交叉配置文件的工作方式。 我當前的代碼使用舊存儲訪問可以正常工作 - 能夠從工作資料中選擇媒體到個人資料。 當我從AndroidManifest.xml中刪除android:requestLegacyExternalStorage=true時,我當前的代碼庫不再能夠從個人資料中看到媒體。

我目前的意圖很簡單,如果在同一配置文件中但不適用於跨配置文件,則如下所示。

我的問題是:為了讓它發揮作用,我缺少什么? 下面發布的代碼片段在同一配置文件中運行良好。 但是,一旦它發生交叉配置,它就會停止工作。

使用設備:小米 Pocophone F1、三星 Galaxy A51

val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
activity.startActivityForResult(Intent.createChooser(intent, "Add From Gallery"), 100)

如果交叉配置文件是指使用工作配置文件等在 android 中添加的其他用戶,則以下內容會有所幫助:

工作配置文件和個人配置文件使用不同的存儲區域,在一個配置文件上有效的文件 URI 在另一個配置文件上無效。 這種情況意味着,如果您將文件 URI 附加到意圖,並且在其他配置文件上處理了該意圖,則處理程序將無法訪問該文件。

相反,您應該使用內容 URI 共享文件,如下所示:


// Open File object from its file URI
File fileToShare = new File(fileUriToShare);

Uri contentUriToShare = FileProvider.getUriForFile(getContext(),"com.example.myapp.fileprovider",fileToShare);

內容 URI 包含文件路徑、提供文件的權限以及標識文件的 ID 號。 您可以使用 FileProvider 為任何文件生成內容 ID。 然后,您可以與其他應用程序(甚至在其他個人資料上)共享該內容 ID。 收件人可以使用內容 ID 來訪問實際文件。

資料來源: https://developer.android.com/work/managed-profiles#sharing_files

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM