1. 程式人生 > 其它 >Android開發,缺少許可權導致無法修改原檔案,獲取所有檔案訪問許可權的方法

Android開發,缺少許可權導致無法修改原檔案,獲取所有檔案訪問許可權的方法

在Android 11開發中,app會遇到使用絕對路徑無法開啟某檔案的情況(檔案存在根目錄下,獲取到的路徑為:/storage/emulated/0/XXX.txt),而使用相對路徑開啟檔案後(獲取到的路徑為:/data/user/0/com.XXX/files/XXX.txt),無法修改原檔案,因為使用相對路徑開啟的檔案會在沙盒環境下開啟,就算修改了內容也只是修改了沙盒環境下檔案的內容,原檔案沒有任何影響。
如果你想要讀寫整個裝置上的檔案,需要使用Intent跳轉到一個專門的授權頁面,引導使用者手動授權。取得訪問許可權後,就可以使用絕對路徑來讀寫原檔案了。操作如下:
首先,在AndroidManifest.xml中宣告MANAGE_EXTERNAL_STORAGE許可權:

`

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
    tools:ignore="ScopedStorage" />

`

然後,使用ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION這個action來跳轉到指定的授權頁面。

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R || Environment.isExternalStorageManager()) { Toast.makeText(this, "已獲得訪問所有檔案的許可權", Toast.LENGTH_SHORT).show(); } else { Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION); startActivity(intent); }

如果獲得訪問所有檔案的許可權則提示;沒有獲得則彈窗讓使用者手動開啟。有了這個許可權之後,就可以使用絕對路徑來讀寫檔案了。
不過對於Android這個目錄下的很多資源仍無法訪問,比如說Android/data這個目錄在Android 11中使用任何手段都無法訪問。畢竟跨app訪問彼此的資料,這個操作是不安全的。
————————————————