运行时申请权限

Android运行一些东西都是需要权限的,以前都会在AndroidManifest.xml里面事先声明好所有的权限,但是这样的话可能会让一些程序申请太多的权限,从而造成安全隐患。所以可以写成动态申请权限。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView((R.layout.first_layout));
    
    Button button12 = (Button)findViewById(R.id.button12);
    button12.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            if(ContextCompat.checkSelfPermission(Main2Activity.this, Manifest.permission.CALL_PHONE)
                    != PackageManager.PERMISSION_GRANTED)//先检查权限
            {
                //检查是否可以弹出权限授权窗口,注意:第一次没弹过或点击了不再授权会返回false
                if (ActivityCompat.shouldShowRequestPermissionRationale(AndroidPlugin.instance, Manifest.permission.CALL_PHONE)) {
                    ActivityCompat.requestPermissions(instance, new String[]{Manifest.permission.CALL_PHONE}, SdkConst.CALL_PHONE);
                }
                else
                {
                    //因为第一次访问也是返回false,所以也需要请求授权,可以添加返回值区别,业务层 记录是否为第一次以决定是否弹出提示去设置开启权限
                    ActivityCompat.requestPermissions(instance, new String[]{Manifest.permission.CALL_PHONE}, SdkConst.CALL_PHONE);
                }
            }else
            {
                call();
            }
        }
    });
}

private void  call()
{
    try{
        Intent intent = new Intent(Intent.ACTION_CALL);
        intent.setData(Uri.parse("tel:10086"));
        startActivity(intent);
    }
    catch (SecurityException e)
    {
        Toast.makeText(Main2Activity.this,"没有权限",Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
}

@Override//申请权限回调
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode)
    {
        case 1:
            if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                call();
            }else
            {
                Toast.makeText(Main2Activity.this,"没有权限" ,Toast.LENGTH_LONG).show();
            }
        break;
    }
}

首页 我的博客
粤ICP备17103704号