權限檢測

在安卓6.0之後有一些權限是要在運行的時候,當用到了該權限的時候,提示用戶是否允許該權限,如果用戶允許纔開始使用該權限,如果用戶拒絕,就使用不了相應的權限,那麼問題來了,用戶拒絕後,再次使用該功能,如何去檢測是否擁有該權限呢,如檢測出沒有如何去設置呢?

檢測是否註冊了該權限

PackageManager pm = context.getPackageManager(); 
		boolean flag = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.ACCESS_COARSE_LOCATION", "包名")); 
		if (flag) 
		{ //有這個權限,做相應處理
			Toast.makeText(context, "有註冊權限", 0).show();
			return true;
		}
		else
		{ //沒有權限 
			Toast.makeText(context, "沒有註冊權限", 0).show();
			return false;
		} 
這個是判斷清單文件當中有沒有申請該權限,如果有就返回true,如果沒有就返回false

檢測用戶是否手動關閉或拒絕了相應的權限,該方法只能在安卓6.0及以上的系統上才能生效,以下的系統在安裝的時候就已經允許了所有的權限,但是國產改造後的安卓系統在6.0以下在第一次運行的時候也會提示時候允許該權限,或者也可以手動的禁止該權限,對於改造後的6.0以下的系統,權限檢測是不起重用的,除非使用相應廠商的API。

public boolean selfPermissionGranted(Context context,String permission) {
   
        boolean result = true;

        if (Build.VERSION.SDK_INT >= 23) {//Build.VERSION_CODES.M

            if (1 >= 23) {
                result = context.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
            } else {
                result = PermissionChecker.checkSelfPermission(context, permission)
                        == PermissionChecker.PERMISSION_GRANTED;
            }
        }

        return result;
    }
這個是在清單文件已經註冊了,但是在6.0以後第一次運行的時候,系統提示是否允許該(定位)權限,如果用戶點了否的話,定位功能就不起作用了,如果你的編譯目標版本是6.0之前的不會出現報錯現象,如果你的編譯目標版本是6.0及之後,權限拒絕,在使用定位功能區地位就會報錯,所以要去判斷一下,地位權限是否被用戶拒絕了,如果拒絕了,提示用戶去打開相應的權限才能使用該功能。

那麼如何用代碼跳轉到設置權限的頁面呢,因爲對於用戶來說,大多數人肯定都是不知道怎麼去設置,所有這些就留給程序員來提供一鍵跳轉的功能

/**
	 * 跳轉到該應用的設置應用詳情界面,權限管理->去設置權限
	 */
	private void getAppDetailSettingIntent() {
        Intent localIntent = new Intent();
        localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (Build.VERSION.SDK_INT >= 9) {
            localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
            localIntent.setData(Uri.fromParts("package", getPackageName(), null));
        } else if (Build.VERSION.SDK_INT <= 8) {
            localIntent.setAction(Intent.ACTION_VIEW);
            localIntent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
            localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());
        }
        startActivity(localIntent);
    }

PermissionChecker類所在包下載:CSDN


Android中的各種訪問權限Permission含義:http://www.cnblogs.com/shiwei-bai/p/4916794.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章