android6.0+动态权限申请demo

    Android中所有的危险权限,一共有9组24个权限。使用这些权限时,必须要进行申请。在android6.0以前可以直接修改AndroidManifest.xml文件,在其中静态生命权限。但是android6.0以后,为保障用户的安全和隐私,android要求开发者动态申请权限。下面给出危险权限表,用作以后参考:

android6.0+动态权限申请demo_第1张图片

下面开始展示如何进行动态权限申请,以获得打电话权限为例: 

第一步,在AndroidManifest.xml中写入如下代码:

android6.0+动态权限申请demo_第2张图片

    其中android:name属性的值是“android.permission.权限名称”,想要申请其他权限模仿这个格式再写一行即可,注意如果这个权限被用户授权了,那么这个权限名所属的权限组的所有权限也会同时被授权。

第二步,在自己创建的权限申请activity中写入如下代码:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button makeCall = (Button) findViewById(R.id.make_call);
        makeCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //检测用户是否已经给我们授权了。
                //ContextCompat.checkSelfPermission()方法共两个参数,第一个参数是Context,第二个参数是权限名。若返回值等于PackageManager.PERMISSION_GRANTED,则已经授权,否则还未授权
                if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    //进行权限申请
                    //ActivityCompat.requestPermissions()方法共三个参数,第一个参数是Activity实例,第二个是存放权限名的数组,第三个参数是请求码,唯一值即可
                    ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.CALL_PHONE}, 1);
                } else {
                    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()方法,授权结果会存放到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:
        }
    }
}

 

 

你可能感兴趣的:(Android开发技术)