onRequestPermissionsResult立即返回拒绝权限

时间:2016-02-25 16:36:39

标签: android permissions

我的Android应用需要请求位置服务权限。我这样做:

ActivityCompat.requestPermissions(this, new String[]{
                            Manifest.permission.ACCESS_COARSE_LOCATION},
                            REQUEST_CODE_ACCESS_COARSE_LOCATION);

但是在调用它之后,onRequestPermissionsResult会立即返回并拒绝权限:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_CODE_ACCESS_COARSE_LOCATION: {

        }
    }
}

权限列在清单中:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COURSE_LOCATION"/>

我还清除了缓存,以防止用户提供的任何先前拒绝对此产生影响。

我希望弹出一个对话框,要求用户授予或拒绝对位置服务的许可,但它不会显示。

2 个答案:

答案 0 :(得分:6)

变化:

<uses-permission android:name="android.permission.ACCESS_COURSE_LOCATION"/>

为:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

许可适用于&#34;粗略&#34;位置数据(即,不是细粒度的),而不是&#34;当然&#34;位置数据(例如,某些大学班级被举办的地方)。

答案 1 :(得分:0)

private int PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION = 100;  
private void checkPermission() {
     if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION)
             != PackageManager.PERMISSION_GRANTED) {
          requestPermissions(newString[{Manfest.permission.ACCESS_COARSE_LOCATION},
                  PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION);
      } else {
          doShowLocation();
      }
  }

  @Override
  public void onRequestPermissionsResult(int requestCode, String[] permissions,
          int[] grantResults) {
      if (requestCode == PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION
              && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
          showContacts();
     }
  }