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!

推薦閱讀: