Android開發-更”聰明”的申請許可權方式

examplecode發表於2018-10-18

在Android6.0以後,很多許可權需要動態申請,只有在使用者點同意後,我們才能使用對應API,因此,正確申請許可權就顯得很重要。

常用方式

通常我們使用這種方式來判斷許可權狀態:

private static boolean isGranted(final String permission) {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
            || PackageManager.PERMISSION_GRANTED
            == ContextCompat.checkSelfPermission(Utils.getApp(), permission);
}

但是用這種方式我們會碰到一個比較棘手的情況,當使用者同意了某個許可權後,然後使用者又在手機的系統設定的應用許可權中關閉了這個許可權,此時我們並不能正確獲取到正確的許可權狀態。

解決辦法

有可能Android團隊意識到了這個問題,所以他們釋出了一個新的許可權檢查類:android.support.v4.content.PermissionChecker;

用這個類進行許可權的檢查就會正確返回,所以我們把許可權校驗的方法修改如下:

import android.support.v4.content.PermissionChecker;

private static boolean isGranted(final String permission) {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
            || PackageManager.PERMISSION_GRANTED
            == PermissionChecker.checkCallingOrSelfPermission(Utils.getApp(), permission);
}

這樣就會解決手機設定與使用者授權不一致的問題。

本文原始地址,如有更多疑問,請參考我的其它Android相關部落格:我的部落格地址


相關文章