大家好,我是小帥,好久沒有更新博客了,哈哈,有點懈怠.今天帶給大家的是android6.0權(quán)限,話說6.0都出來好久了,老手忽悠吧!我還是習(xí)慣喜歡上個效果圖!

當(dāng)用戶拒絕權(quán)限的時候提示權(quán)限的處理,并且如何打開,中間的dialog可以自己定義.
6.0的運行時權(quán)限,需要使用如下的API:
int checkSelfPermission(String permission) 用來檢測應(yīng)用是否已經(jīng)具有權(quán)限
void requestPermissions(String[] permissions, int requestCode) 進行請求單個或多個權(quán)限
void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 用戶對請求作出響應(yīng)后的回調(diào)
其實簡單講就是對這幾個的API的使用,記住就行.還有一個問題就是什么時候需要用到6.0權(quán)限,其實這里只需要記住危險權(quán)限就行,下面小帥給大家準備一張表,需要的拿去

左邊的是權(quán)限組,右邊的是權(quán)限組里面的權(quán)限,只要一次申請權(quán)限組里面的權(quán)限,對應(yīng)的權(quán)限組的權(quán)限也申請了.
好了,聊了那么久,還是直接上代碼吧,因為各種情況的都不一樣,所以這里簡單的舉了個列子
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button mBtnMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mBtnMain = (Button) findViewById(R.id.btn_main);
mBtnMain.setOnClickListener(this);
}
private void callPhone() {
//沒有授予權(quán)限
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED) {
//做權(quán)限處理,主要是申請權(quán)限
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.CALL_PHONE},1);
}else {
doCallPhone();
}
}
private void doCallPhone() {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+"10086"));
startActivity(intent);//代碼檢查工具,不需要處理
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_main:
callPhone();
break;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
//申請了權(quán)限
case 1:
if (grantResults[0]== PackageManager.PERMISSION_GRANTED) {
doCallPhone();
}else {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("幫助")
.setMessage("當(dāng)前應(yīng)用缺少必要權(quán)限.請點擊'設(shè)置'-'權(quán)限',打開所需權(quán)限.最后點擊兩次后退按鈕,即可返回")
.setCancelable(false)
.setPositiveButton("設(shè)置", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
}
})
.setNegativeButton("退出", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
}).show();
AlertDialog alert = builder.create();
}
break;
}
}
}
記得去清單文件里面添加權(quán)限
** <uses-permission android:name="android.permission.CALL_PHONE" />**
其實有時候覺得6.0權(quán)限沒有必要做,但當(dāng)你手機是6.0的時候,你如果只寫
doCallPhone()的邏輯代碼時候會得不到執(zhí)行.
當(dāng)然也可以有偷懶的方法了
你的應(yīng)用將targetSdkVersion設(shè)置低于23,那么在6.0的系統(tǒng)上不會為這個應(yīng)用開啟運行時權(quán)限機制,即按照以前的一刀切方式處理.
其他權(quán)限基本類型,有些手機比如小米,華為里面是定制版的Android,里面的dialog風(fēng)格是不一樣的,但實現(xiàn)原理不變,最后附上demo鏈接:
https://github.com/Chenshuai770/test_permision3.git
我是小帥,一起進步