【问题标题】:How to check android application permissions on runtime using ContextCompat.checkSelfPermission()?如何使用 ContextCompat.checkSelfPermission() 在运行时检查 android 应用程序权限?
【发布时间】:2017-12-06 09:17:57
【问题描述】:

需要根据 android 6 及以上标准检查 android 应用程序用户是否授予所需权限(特别是读取用户设备短信)。我正在专门寻找 android 开发者网站上描述的 ContextCompat.checkSelfPermission() 方法。 看这里: link

【问题讨论】:

标签: android permissions


【解决方案1】:

请关注this tutorials这里是完整的源代码

static final int PERMISSION_ALL = 1;
    String[] PERMISSIONS =
            {Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION};

     protected void runtimePermission() {
        if (!hasPermission(ContactUS.this, PERMISSIONS)) {
            ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
        }
    }

    public static boolean hasPermission(Context context, String... permissions) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }

            }
        }
        return true;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case PERMISSION_ALL:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    //permission granted
                    //your logic here
                } else {
                    //permission denied
                }
                break;

        }
    }

【讨论】:

    【解决方案2】:

    你可以像这样添加运行时权限 请按照以下步骤操作

    第 1 步:- 首先在清单文件中添加此权限

    android.Manifest.permission.ACCESS_FINE_LOCATION,
    android.Manifest.permission.ACCESS_COARSE_LOCATION,
    

    现在,比

    第 2 步:请求运行时权限

    String permission = android.Manifest.permission.ACCESS_FINE_LOCATION;
            if (ActivityCompat.checkSelfPermission(SearchCityClass.this, permission)
                    != PackageManager.PERMISSION_GRANTED && ActivityCompat.
                    checkSelfPermission(SearchCityClass.this, android.Manifest.permission.ACCESS_COARSE_LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(SearchCityClass.this, new String[]
                        {permission}, PERMISSION_GPS_CODE);
    
            }
    

    第 3 步:最后在 onRequestPermissionsResult 中处理权限结果

     @Override
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == PERMISSION_GPS_CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
    
            Toast.makeText(this, location_permission_granted_msg, Toast.LENGTH_SHORT).show();
    
        } else {
    
            Toast.makeText(this, location_permission_not_granted_msg, Toast.LENGTH_SHORT).show();
        }
    }
    
    }
    

    【讨论】:

      【解决方案3】:

      如果权限被授予:

      checkSelfPermission(Manifest.permission.READ_CONTACTS)
      

      必要时请求权限

      if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
                  != PackageManager.PERMISSION_GRANTED) {
              requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
                      MY_PERMISSIONS_REQUEST_READ_CONTACTS);
      
              /* MY_PERMISSIONS_REQUEST_READ_CONTACTS is an app-defined int constant */
      
              return;
          }
      

      处理权限请求响应

      @Override
      public void onRequestPermissionsResult(int requestCode,
              String permissions[], int[] grantResults) {
          switch (requestCode) {
              case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                  if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
      
                      /* permission granted */
      
                  } else {
      
                      /* permission denied */
                  }
                  return;
              }
      
              /* check for other permissions */
          }
      }
      

      你也可以使用像this 这样的库,无论如何祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-11
        • 2012-05-09
        • 2015-12-23
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 2017-01-01
        相关资源
        最近更新 更多