位置pipe理器删除更新权限

我正在使用android工作室和compileSdkVersion是23我在使用下面的代码

if(locationManager != null){ locationManager.removeUpdates(GPSListener.this); } 

停止GPS侦听器是实现LocationListener的类的GPS更新。

但在removeUpdates行我得到低于警告

调用需要可能被用户拒绝的权限:代码应该明确检查权限是否可用(使用checkPermission )或处理潜在的SecurityException

我没有得到上述代码中的问题。 任何额外的权限需要在清单文件中添加?

问候。

Solutions Collecting From Web of "位置pipe理器删除更新权限"

从SDK 23开始,在调用Location APIfunction之前,您应该/需要检查权限。 这里是一个如何做到这一点的例子:

 if (locationManager != null) { if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { locationManager.removeUpdates(GPSListener.this); } } 

checkSelfPermission() ,它是检查'你'(这个应用程序)是否有正确的权限。 还有checkPermission() ,它检查另一个进程是否具有正确的权限。

笔记

  • 在执行此运行时检查之后,还需要在AndroidManifest中要求相关权限。
  • 如果你的targetSdk是<23,你应该使用ContextCompat.checkSelfPermission()来代替(感谢JerryBrady)

我无法使用checkSelfPermission() ,因为我的最小API是14和23是必需的。 知道这一点,你也可以try catch一个SecurityException

例:

 try { locationManager.removeUpdates(GPSListener.this); } catch (SecurityException e) { Log.e("PERMISSION_EXCEPTION","PERMISSION_NOT_GRANTED"); } 

要添加到Jerry Brady关于ContextCompat的评论,这是<23:

  if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) 

这是我的解决scheme!

  if (Build.VERSION.SDK_INT >= 23) { if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { lm.removeUpdates(this); } } else { lm.removeUpdates(this); }