如何在我的音樂播放器應用 Android 11 上不使用“MANAGE_EXTERNAL_STORAGE”權限的情況下洗掉音頻檔案
像這樣
uj5u.com熱心網友回復:
這取決于音頻檔案所在的位置。
如果該檔案存在于應用程式資料目錄 /data/data//files 中,則洗掉該檔案不需要任何權限
如果該檔案是外部存盤的一部分,則只有 getExternalFilesDir 回傳的目錄下的檔案可以在沒有任何權限的情況下洗掉。從 Android API 級別 19 開始,訪問 getExternalFilesDir 回傳的檔案夾下的任何檔案都不需要權限。
如果不是以上兩種情況,請指定音頻檔案的路徑。
uj5u.com熱心網友回復:
我們通常使用 file.delete() 洗掉檔案;(或) ContentResolver.delete() (或) 對已洗掉的檔案進行媒體掃描,這將洗掉它在 MediaStore 中的條目。
這是我們習慣于Android 11 os以下;如果您通過在清單 android:requestLegacyExternalStorage="true";
現在在 Android 11 中,您被迫使用范圍存盤。如果您想洗掉任何不是您創建的媒體檔案,您必須獲得用戶的許可。您可以使用 MediaStore.createDeleteRequest() 獲取權限。這將顯示一個對話框用戶將要執行的操作,一旦授予權限,android 有一個內部代碼來負責洗掉物理檔案和 MediaStore 中的條目。
private void requestDeletePermission(List<Uri> uriList){
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
PendingIntent pi = MediaStore.createDeleteRequest(mActivity.getContentResolver(), uriList);
try {
startIntentSenderForResult(pi.getIntentSender(), REQUEST_PERM_DELETE, null, 0, 0,
0);
} catch (SendIntentException e) { }
}
}
上面的代碼會同時執行這兩種操作,請求洗掉權限,一旦授予權限,也可以洗掉檔案。
你會在 onActivityResult() 中得到回呼結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/414761.html
標籤:
下一篇:簡單的HDF5C 問題
