Android的棉花糖我們需要所有權(quán)限請求需要得到用戶的許可(當(dāng)我們的targetSdkVersion>=23時(shí)是必須動(dòng)態(tài)獲取權(quán)限申請)厢洞。所以這里,我們就需要去處理當(dāng)用戶拒絕了我們的權(quán)限申請帆精,我們的代碼該如何處理。
這里咱們代碼配合效果圖來演示具體效果。
這里假設(shè)我需要去申請?jiān)摍?quán)限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
當(dāng)我們第一次去點(diǎn)擊READ PHONE STATE時(shí)就會(huì)彈出這個(gè)權(quán)限申請dialog恃鞋,如果用戶點(diǎn)擊了允許匠童,那恭喜你埂材,萬事大吉了,你就不用去擔(dān)心需要權(quán)限的代碼不能執(zhí)行了汤求。但是俏险,如果用戶點(diǎn)擊了拒絕,那很不幸扬绪,你需要權(quán)限的代碼是不能執(zhí)行竖独,如果你不加處理,非要執(zhí)行那段代碼的話挤牛,應(yīng)用就會(huì)直接崩潰莹痢,崩潰日志就會(huì)告訴你,需要獲取該權(quán)限。
if (Build.VERSION.SDK_INT >= 23) {
if (checkPermissionsrp()) {
// 對(duì)于高于或等于23的API代碼導(dǎo)向裝置
// 執(zhí)行具體邏輯
} else {
requestPermissionsrp(); //代碼去執(zhí)行權(quán)限申請
}
} else {
//面向API的23以下設(shè)備的代碼
// 執(zhí)行具體邏輯
}
}
private boolean checkPermissionsrp() {
int result2 = ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_PHONE_STATE);
if (result2 == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
private void requestPermissionsrp() {
boolean permissionRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE);
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.READ_PHONE_STATE)) {
new AlertDialog.Builder(this)
.setMessage("跳轉(zhuǎn)到設(shè)置頁面")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_SETTINGS);
startActivity(intent); // 打開系統(tǒng)設(shè)置界面
}
})
.setNegativeButton("Cancel", null)
.create()
.show();
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_PHONE_STATE}, PERMISSION_REQUEST_CODE);
}
}
當(dāng)我們點(diǎn)擊了拒絕時(shí)竞膳,就會(huì)打出權(quán)限被拒絕航瞭,您不能繼續(xù)執(zhí)行。所以在這時(shí)候坦辟,咱們就需要去自己單獨(dú)自定義一個(gè)dialog刊侯,去引導(dǎo)用戶允許咱們的權(quán)限申請。
當(dāng)用戶跟隨我們的引導(dǎo)去授予權(quán)限時(shí)锉走,然后返回我們的APP時(shí)滨彻,checkPermissionsrp()方法就會(huì)返回true,這時(shí)候挠日,我們的代碼邏輯就可以正常執(zhí)行了疮绷。
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("value", "權(quán)限允許候味,您可以繼續(xù)執(zhí)行");
} else {
Log.e("value", "權(quán)限被拒絕网梢,您不能繼續(xù)執(zhí)行。");
}
break;
}
}
到這里别瞭,權(quán)限申請就結(jié)束了懂算,其他權(quán)限申請也類似只冻。
快樂生活!快樂工作计技!快樂編程喜德!