2017-08-31 1305 views
0

我要求ACCESS_COARSE_LOCATION权限,但没有显示对话框。请求授予权限时,不会显示requestpermission对话框

这里是我的代码:

if (!checkPermissions()) { 
    requestPermissions(); 
} else { 
    getLastLocation(); 
} 

这里的requestPermission()

private void requestPermissions() { 
     boolean shouldProvideRationale = 
       ActivityCompat.shouldShowRequestPermissionRationale(this, 
         Manifest.permission.ACCESS_COARSE_LOCATION); 

     // Provide an additional rationale to the user. This would happen if the user denied the 
     // request previously, but didn't check the "Don't ask again" checkbox. 
     if (shouldProvideRationale) { 
      Log.i(TAG, "Displaying permission rationale to provide additional context."); 

      AlertDialog.Builder builder1 = new AlertDialog.Builder(MainActivity.this); 
      builder1.setMessage("Location permission is needed in order to show your current location"); 
      builder1.setCancelable(true); 

      builder1.setPositiveButton(
        "OK", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 
          ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.RECORD_AUDIO}, 
            PERMISSION_REQUEST_RECORD_AUDIO); 
         } 
        }); 

      AlertDialog alert11 = builder1.create(); 
      alert11.show(); 

     } else { 
      Log.i(TAG, "Requesting permission"); 
      // Request permission. It's possible this can be auto answered if device policy 
      // sets the permission in a given state or the user denied the permission 
      // previously and checked "Never ask again". 
      ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 
        REQUEST_PERMISSIONS_REQUEST_CODE); 
     } 
    } 

我得到08-31 13:02:25.067 8231-8231/com.appName.app/com.appName.app.MainActivity: Requesting permission打印出来,但没有对话框询问许可显示出来。

这是怎么发生的?

回答

0

很抱歉的愚蠢的错误。

我想出了这个问题。我忘了在AndroidManifest.xml中添加<uses-permission>标签。

添加:

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

AndroidManifest.xml<manifest>标签做的工作。

0

试试这个

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}, 123); 

     } 

现在处理permisiion结果

@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 ", Toast.LENGTH_SHORT).show(); 

     } else { 

      Toast.makeText(this, "location_permission_not_granted ", Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 

不要忘记在manifest文件中添加此权限

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