您好,登錄后才能下訂單哦!
在Android 6.0 (API 23) 發布之前, 所有的權限都在安裝應用的時候顯示給用戶,用戶選擇安裝則表示全部接受這些權限, 之后無法撤銷對這些權限的授權。但Android 6.0開始, 一部分比較危險的權限需要在程序運行時顯式彈框,請求用戶授權。所以,之前開發應用時,在manifest文件中配置對應的權限這種做法便達不到之前的效果。那么,現在要怎么做呢?提供兩種思路,僅供參考:
1:判斷android系統的版本,如果不是6.0及以上,按正常邏輯處理,如果是,則去打開系統彈框,請求系統權限。
2:直接判斷當前應用是否有對應的權限,如果有,處理邏輯代碼,如果沒有則去請求系統權限。
個人比較傾向第二種,但第二種必須在manifest文件中進行權限的配置,比如你需要相機權限,就還按照之前開發應用在manifest中配置相機的權限 。接下來說下如何實現第二種:
在進行需要權限的操作之前檢查系統是否有對應的權限,以相機權限為例:
if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(NewGoodsActivity.this, Manifest.permission.CAMERA)){
/**
*代表應用已有該權限,去做功能處理
**/
}else{
/**
*代表應用還沒有獲得該權限,去申請權限
**/ }
那么如果應用沒有權限,怎么去獲得呢?也就是android 6.0及以后,怎么調用系統彈框,讓用戶操作對應權限呢?方法就是requestPermissions,用法和startacitivityforresult方法類似,還是以相機操作為例:
請求權限:
String[] perms = {"android.permission.CAMERA"};
int permsRequestCode = 890;
requestPermissions(perms, permsRequestCode);
用戶操作后的回調方法是:
@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){
switch(permsRequestCode){
case 890:
boolean cameraAccepted = grantResults[0]== PackageManager.PERMISSION_GRANTED;
if(cameraAccepted){
//授權成功之后,調用系統相機進行拍照操作等
}else{
//用戶授權拒絕之后,友情提示一下就可以了
}
break;
}
}
第一種思路的主要方法和第二種一樣,都是requestPermissions這個方法。
參考:http://mp.weixin.qq.com/s?__biz=MjM5NDkxMTgyNw==&mid=2653057440&idx=1&sn=0dec446942b2531edfc6210eb6302228&scene=0#wechat_redirect
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。