一个简单的例子来处理Android6.0权限机制

Android6.0权限处理

Posted by 陈再峰 on March 1, 2017

Android6.0 添加了权限的机制,需要用户给予一些危险的权限。比如:访问SD卡,拨打电话等。我们怎样对权限进行处理呢?

权限机制的处理的逻辑

对于Android的权限处理,有三个核心的方法: 1、ContextCompat.checkSelfPermission:用于检测是否拥有权限。 2、ActivityCompat.requestPermissions:请求该权限。 3、onRequestPermissionsResult:获取权限请求的回调。

一段打电话的代码来展示主要的逻辑:

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、判断是否有打电话的权限
        if(ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
            //没有获取权限则做权限处理
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CALL_PHONE},PERMISSION_CALL);
        } else {
            //已经获取了权限,则执行打电话操作
            Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+100010));
            startActivity(intent);
        }
    }

    //权限请求回调
    @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{
                    //用户没有授予权限,
                }
                break;
        }
    }
}

效果图

代码的逻辑比较简单,先checkSelfPermission检查是否授权,如果没有授权则请求权限requestPermissions,然后将请求权限结构回调在onRequestPermissionsResult中。

推荐博客: http://blog.csdn.net/yanzhenjie1003/article/details/52503533/