【问题标题】:Location Manager remove updates permission位置管理器移除更新权限
【发布时间】:2015-12-19 07:57:52
【问题描述】:

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

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

停止 GPS 更新,其中 GPS 侦听器是一个实现 LocationListener 的类。

但在 removeUpdates 行中,我得到低于 lint 警告

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

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

问候。

【问题讨论】:

标签: android android-location


【解决方案1】:

自 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 ContextCompat.checkSelfPermission() 代替(感谢 JerryBrady)

【讨论】:

  • 请注意,如果你的目标是
  • 我想哭。为什么应用需要权限才能从位置管理器中删除已附加的位置侦听器?
【解决方案2】:

我无法使用checkSelfPermission(),因为我的最低 API 为 14,并且需要 23。知道了,你也可以trycatch 一个SecurityException

例子:

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

【讨论】:

  • 问题是针对目标sdk版本23。与min api没有关系。
  • 问题是针对“compileSdkVersion 23”,这并不意味着应用程序的目标是 23。如果您想向后兼容完整的 Android M 支持,请改用 ContextCompat.checkSelfPermission(),它会起作用。跨度>
  • 对不起。我没有意识到这一点。但是我觉得这个选项使用try-catch还是有用的。
  • 这个答案对我有帮助。但我认为这不是一个适当的解决方案。但我赞成。
【解决方案3】:

要添加到 Jerry Brady 对 ContextCompat 的评论中,这是

 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)

【讨论】:

    【解决方案4】:

    这是我的解决方案!

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 2013-07-30
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多