一、运行时权限
-
什么是运行时权限?
运行时权限,顾名思义,就是在运行的过程中去申请权限 -
为什么要有运行时权限?
防止流氓软件产生 -
运行时权限怎么做?
- 判断用户是否已经给过权限
public void click1(View view) { /* * 如果checkSelfPermission()方法的返回值与PackageManager.PERMISSION_GRANTED相等,则表明已经授权 * checkSelfPermission()参数说明: * 参数一:上下文对象 * 参数二:具体的权限名 * */ if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { /* * 如果没有授权,就调用requestPermissions()方法,请求权限 * requestPermissions()参数说明: * 参数一:上下文对象 * 参数二:String类型数据,用于存放我们要申请的权限名字 * 参数三:请求码,保证唯一性 * */ ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1); } else { Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:10086")); startActivity(intent); } }
- 重写回调方法(用户做出选择后会回调这个方法,无论什么选择都会回调)
/* * 参数解析: * requestCode: 与我们使用requestPermissions()方法传入的 * grantResults:里面是我们授权的结果,只有两个值,授权或者不授权 * */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { call(); } else { Toast.makeText(this, "您没有同意权限", Toast.LENGTH_LONG).show(); } break; } }
- 在AndroidManifest.xml中去添加对应的权限
<uses-permission android:name="android.permission.CALL_PHONE"/>
- 判断用户是否已经给过权限
-
有哪些权限需要我们运行时申请?
-
运行时权限注意事项:
- 当用户同意了上面其中一个权限时,就代表用户同意了当前权限所在组的所有权限
- 举例子:
比如,当用户同意了SMS里的 SEND_SMS 权限时,就表示该用户同意了SMS组里的其他权限。对于使用其他权限时,我们只需要在AndroidManifes.xml中配置一下即可,而不用再一次编写运行时权限申请代码了