在Android 6.0 (API 23) 發(fā)布之前, 所有的權(quán)限都在安裝應(yīng)用的時候顯示給用戶,用戶選擇安裝則表示全部接受這些權(quán)限, 之后無法撤銷對這些權(quán)限的授權(quán)。但Android 6.0開始, 一部分比較危險的權(quán)限需要在程序運行時顯式彈框,請求用戶授權(quán)。所以,之前開發(fā)應(yīng)用時,在manifest文件中配置對應(yīng)的權(quán)限這種做法便達不到之前的效果。那么,現(xiàn)在要怎么做呢?提供兩種思路,僅供參考:
成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站制作、成都網(wǎng)站設(shè)計與策劃設(shè)計,遼源網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:遼源等地區(qū)。遼源做網(wǎng)站價格咨詢:028-86922220
1:判斷android系統(tǒng)的版本,如果不是6.0及以上,按正常邏輯處理,如果是,則去打開系統(tǒng)彈框,請求系統(tǒng)權(quán)限。
2:直接判斷當(dāng)前應(yīng)用是否有對應(yīng)的權(quán)限,如果有,處理邏輯代碼,如果沒有則去請求系統(tǒng)權(quán)限。
個人比較傾向第二種,但第二種必須在manifest文件中進行權(quán)限的配置,比如你需要相機權(quán)限,就還按照之前開發(fā)應(yīng)用在manifest中配置相機的權(quán)限 。接下來說下如何實現(xiàn)第二種:
在進行需要權(quán)限的操作之前檢查系統(tǒng)是否有對應(yīng)的權(quán)限,以相機權(quán)限為例:
if (PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(NewGoodsActivity.this, Manifest.permission.CAMERA)){
/**
*代表應(yīng)用已有該權(quán)限,去做功能處理
**/
}else{
/**
*代表應(yīng)用還沒有獲得該權(quán)限,去申請權(quán)限
**/ }
那么如果應(yīng)用沒有權(quán)限,怎么去獲得呢?也就是android 6.0及以后,怎么調(diào)用系統(tǒng)彈框,讓用戶操作對應(yīng)權(quán)限呢?方法就是requestPermissions,用法和startacitivityforresult方法類似,還是以相機操作為例:
請求權(quán)限:
String[] perms = {"android.permission.CAMERA"};
int permsRequestCode = 890;
requestPermissions(perms, permsRequestCode);
用戶操作后的回調(diào)方法是:
@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults){
switch(permsRequestCode){
case 890:
boolean cameraAccepted = grantResults[0]== PackageManager.PERMISSION_GRANTED;
if(cameraAccepted){
//授權(quán)成功之后,調(diào)用系統(tǒng)相機進行拍照操作等
}else{
//用戶授權(quán)拒絕之后,友情提示一下就可以了
}
break;
}
}
第一種思路的主要方法和第二種一樣,都是requestPermissions這個方法。
參考:http://mp.weixin.qq.com/s?__biz=MjM5NDkxMTgyNw==&mid=2653057440&idx=1&sn=0dec446942b2531edfc6210eb6302228&scene=0#wechat_redirect