在Android6.0以后,很多權(quán)限需要?jiǎng)討B(tài)申請,只有在用戶點(diǎn)同意后,我們才能使用對應(yīng)API,因此,正確申請權(quán)限就顯得很重要。
常用方式
通常我們使用這種方式來判斷權(quán)限狀態(tài):
private static boolean isGranted(final String permission) {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M
|| PackageManager.PERMISSION_GRANTED
== ContextCompat.checkSelfPermission(Utils.getApp(), permission);
}
但是用這種方式我們會碰到一個(gè)比較棘手的情況,當(dāng)用戶同意了某個(gè)權(quán)限后,然后用戶又在手機(jī)的系統(tǒng)設(shè)置的應(yīng)用權(quán)限中關(guān)閉了這個(gè)權(quán)限,此時(shí)我們并不能正確獲取到正確的權(quán)限狀態(tài)。
解決辦法
有可能Android團(tuán)隊(duì)意識到了這個(gè)問題,所以他們發(fā)布了一個(gè)新的權(quán)限檢查類:android.support.v4.content.PermissionChecker;
用這個(gè)類進(jìn)行權(quán)限的檢查就會正確返回,所以我們把權(quán)限校驗(yàn)的方法修改如下:
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);
}
這樣就會解決手機(jī)設(shè)置與用戶授權(quán)不一致的問題。