在程序运行时申请权限

来源:互联网 发布:加入放心淘宝贝没打标 编辑:程序博客网 时间:2024/05/16 07:29

在有些情况下我们要在程序运行时申请权限,接下来写的是我从书上(第一行代码 第二版)看到的方法,这里以打开拨号界面为例

先来看一下Android中的所有危险权限,如下图。
Android中的所有危险权限
要注意的是,表格中每个危险权限都属于一个权限组,用户一旦同意授权,那么该权限所对应得权限组中那个的所有的其他权限也会同时被授权。6.0及以上系统在使用危险权限是都必须进行运行时权限处理。

第一步

在AndroidManifeast.xml文件中加入如下权限:

<uses-permission android:name="android.permission.CALL_PHONE"/>

第二步

在要打开拨号界面前,先检查该权限已被许可,代码如下:

if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE)                != PackageManager.PERMISSION_GRANTED){            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);        }else {            call();        }
其中call()方法将打开拨号界面这个动作封装了起来,代码如下:
private void call() {        try {            Intent intent = new Intent(Intent.ACTION_CALL);            intent.setData(Uri.parse("tel:10086"));            startActivity(intent);        } catch (SecurityException e) {            e.printStackTrace();        }    }

第三步

重写onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)方法:

@Override    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {        switch (requestCode){            case 1:                if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){                    call();                } else {                    Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();                }                break;            default:                break;        }    }
原创粉丝点击