Android6.0 添加了權(quán)限的機(jī)制,需要用戶給予一些危險(xiǎn)的權(quán)限。比如:訪問SD卡,撥打電話等曲稼。我們怎樣對權(quán)限進(jìn)行處理呢?
權(quán)限機(jī)制的處理的邏輯
對于Android的權(quán)限處理湖员,有三個(gè)核心的方法:
1贫悄、ContextCompat.checkSelfPermission:用于檢測是否擁有權(quán)限。
2破衔、ActivityCompat.requestPermissions:請求該權(quán)限清女。
3钱烟、onRequestPermissionsResult:獲取權(quán)限請求的回調(diào)晰筛。
一段打電話的代碼來展示主要的邏輯:
public class CallPermissionActivity extends AppCompatActivity {
public final static int PERMISSION_CALL = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.call);
}
public void call(View view){
call();
}
private void call(){
//1、判斷是否有打電話的權(quán)限
if(ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
//沒有獲取權(quán)限則做權(quán)限處理
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},PERMISSION_CALL);
} else {
//已經(jīng)獲取了權(quán)限拴袭,則執(zhí)行打電話操作
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+100010));
startActivity(intent);
}
}
//權(quán)限請求回調(diào)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case PERMISSION_CALL:
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
call();
}else{
//用戶沒有授予權(quán)限读第,
}
break;
}
}
}
效果圖
代碼的邏輯比較簡單,先checkSelfPermission檢查是否授權(quán)拥刻,如果沒有授權(quán)則請求權(quán)限requestPermissions怜瞒,然后將請求權(quán)限結(jié)構(gòu)回調(diào)在onRequestPermissionsResult中。
推薦博客:
http://blog.csdn.net/yanzhenjie1003/article/details/52503533/