Android permission denied原因歸納和解決辦法
下面是我在學習android開發時遇到的permission denied的問題和解決辦法
1. net: ERR_CACHE_MISS
解決方法
在AndroidManifest.xml中加入 permission如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.xxx"> <uses-permission android:name="android.permission.INTERNET"/> ... </manifest>
2. 讀取寫入external storage(手機中的文件)
解決方法
首先,同樣需要在AndroidManifest.xml中加入 permission
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.xxx"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 下面這行代碼也非常重要,千萬不要忘記加--> <application ... android:requestLegacyExternalStorage="true">...</application> </manifest>
其次還需要使得這個app獲得 存儲權限可以在手機 ->設置 -> 對應app 中進行設置,允許app讀取手機內存(最簡單的方法)。
更好的方法(正規的方法)是在打開app時,檢查app是否有權限讀取內存。如果沒有的話,提示用戶開啟 可以寫一個snackbar指向 這個app的settings。代碼如下:
/** * 檢查app是否擁有存儲權限,如果沒有的話,提醒用戶開啟權限 */ public void handlePermission() { // 檢查是否開啟 Manifest.permission.xxx // (xxx 為權限,根據自己需求添加) if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "Permission has been allowed", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "ask for permission",Toast.LENGTH_SHORT).show(); // 請求權限 ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); Log.d(TAG, "handlePermission: has aksed"); } }
此函數可以根據自己需求放到 onCreate() method裡面或者,listener() 裡面。例如,如果放到onCreate() 裡,打開此頁面時會提醒用戶開啟對應權限。
到此這篇關於Android permission denied原因歸納和解決辦法的文章就介紹到這瞭,更多相關Android permission denied內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Android開發之permission動態權限獲取詳解
- Android11及以上文件讀寫權限申請詳細介紹
- Android權限詢問的實例詳解
- Android錄音功能的實現以及踩坑實戰記錄
- Android實現邊錄邊播功能