Android基础 ---- 运行时权限

一、运行时权限

  • 什么是运行时权限?
    运行时权限,顾名思义,就是在运行的过程中去申请权限

  • 为什么要有运行时权限?
    防止流氓软件产生

  • 运行时权限怎么做

    • 判断用户是否已经给过权限
      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"/>
      
  • 有哪些权限需要我们运行时申请?
    Android基础 ---- 运行时权限

  • 运行时权限注意事项:

    • 当用户同意了上面其中一个权限时,就代表用户同意了当前权限所在组的所有权限
    • 举例子:
      比如,当用户同意了SMS里的 SEND_SMS 权限时,就表示该用户同意了SMS组里的其他权限。对于使用其他权限时,我们只需要在AndroidManifes.xml中配置一下即可,而不用再一次编写运行时权限申请代码了