位置管理器删除更新权限

时间:2015-09-22 11:03:46

标签: android android-location

我使用的是android studio,而compileSdkVersion是23 因为我使用下面的代码

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

停止gps更新,其中GPS Listener是一个实现LocationListener的类。

但是在removeUpdates行中我得到了lint警告

  

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

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

问候。

4 个答案:

答案 0 :(得分:26)

从SDK 23开始,您应该/需要在调用Location API功能之前检查权限。以下是如何执行此操作的示例:

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)

答案 1 :(得分:14)

我无法使用checkSelfPermission(),因为我的最低API为14,需要23。知道这一点,您还可以trycatch一个SecurityException

示例:

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

答案 2 :(得分:5)

要添加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)

答案 3 :(得分:-1)

这是我的解决方案!

  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);

            }