//打电话方法 public void doCall() { Intent intentPhone = new Intent(Intent.ACTION_CALL, Uri.parse("tel:15538307513")); startActivity(intentPhone); } //检查打电话权限,点击就会回调下面的方法哦 public void checkCallPermission() { //运行时权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { boolean b = ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CALL_PHONE);//有没有"不再提示"的chexkbox,第一次没有,所以返回false,执行else里面的内容 if(b == true){ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 2);//一调用就会弹出选择对话框,第二.三.四次弹出的对话框,不管点击接受或拒绝,都会回调下面的方法,请求码是2.特殊的是如果一旦勾选了不再提示,再点击的时候就只会执行下面2的else里的代码了。 }else{ ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);//一调用就会弹出选择对话框,第一次弹出的对话框,不管点击接受或拒绝,都会回调下面的方法,请求码是1.把判断扔给回调方法,推卸责任。 } } else { doCall(); } } //回调方法 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case 1://第一次 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {//接受 doCall(); }else{//拒绝 Toast.makeText(MainActivity.this, "您拒绝了打电话权限", Toast.LENGTH_SHORT).show(); } break; case 2://第二。三。。。次 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {//接受 doCall(); } else {//拒绝 Toast.makeText(MainActivity.this, "您可以去设置,应用里面打开权限", Toast.LENGTH_SHORT).show(); } break; } }
安卓6.0运行时权限,终极答案
最新推荐文章于 2019-01-19 22:37:47 发布