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訪問彼此的數據,這個操作是不安全的。
————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM