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;
}
}