“gps”位置提供程序需要android 6.0的ACCESS_FINE_LOCATION权限

在Android清单文件中,我已经添加了gps的访问权限

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

我使用位置pipe理器类如下所示执行位置更新

  private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this ); 

但是上面的线是一个例外说明

 "gps" location provider requires ACCESS_FINE_LOCATION permission 

这个事情只发生在targetSDKVersion 23(即与Android 6.0),我也testing了在Android 5.1中工作正常。

请帮助!!。在此先感谢。

Solutions Collecting From Web of "“gps”位置提供程序需要android 6.0的ACCESS_FINE_LOCATION权限"

从6.0开始,一些权限被认为是“危险的”(FINE_LOCATION就是其中之一)。

为了保护用户,他们必须在运行时被授权,所以用户知道是否与他的行为有关。

去做这个 :

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

它将显示一个对话框,用户将在其中select是否使用位置自动化您的应用程序。

然后使用这个函数得到用户的答案:

 public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case 1: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { } else { // permission denied, boo! Disable the // functionality that depends on this permission. } return; } // other 'case' lines to check for other // permissions this app might request } } 

如果用户接受一次,那么你的应用程序会记住它,你不需要再发送这个DialogBox。 请注意,如果用户决定,用户可以稍后禁用它。 然后在请求位置之前,您必须testing是否仍然授予权限:

 public boolean checkLocationPermission() { String permission = "android.permission.ACCESS_FINE_LOCATION"; int res = this.checkCallingOrSelfPermission(permission); return (res == PackageManager.PERMISSION_GRANTED); } 

这一切都在Android文档中解释: http : //developer.android.com/training/permissions/requesting.html

试试这个代码

 private void marshmallowGPSPremissionCheck() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && getActivity().checkSelfPermission( Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED && getActivity().checkSelfPermission( Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions( new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_LOCATION); } else { // gps functions. } } 

加这也………………

 @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == MY_PERMISSION_LOCATION && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // gps functionality } } 

从版本6开始,我们对android权限进行了一些更改。您必须同意使用这些权限的时间,而不是在安装应用程序时。 如果使用buildtools版本23,可能会出现一些问题。 检查这个链接了解。 进入设备设置>应用程序,select您的应用程序,然后手动接受权限,并检查您的问题是否解决。

我最近也遇到过这个问题。 在Android 6.0中,您需要在应用程序中使用它们时明确要求所需的权限。 如果您不这样做,位置权限将被自动拒绝。

  // Here, thisActivity is the current activity if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION)) { // Show an expanation to the user *asynchronously* -- don't block // this thread waiting for the user's response! After the user // sees the explanation, try again to request the permission. } else { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_FINE_LOCATION); // MY_PERMISSIONS_REQUEST_FINE_LOCATION is an // app-defined int constant. The callback method gets the // result of the request. } } 

更多信息在这里: http : //developer.android.com/training/permissions/requesting.html