位置管理器删除更新权限
Location Manager remove updates permission
我正在使用 android studio 并且 compileSdkVersion 是 23
因为我正在使用下面的代码
if(locationManager != null){
locationManager.removeUpdates(GPSListener.this);
}
停止 GPS 更新,其中 GPS 侦听器是 class,它实现了 LocationListener。
但是在 removeUpdates 行中我收到了 lint 警告
Call requires permission which may be rejected by user: code should
explicitly check to see if permission is available (with
checkPermission
) or handle a potential SecurityException
我不明白上面代码中的问题是什么。
需要在清单文件中添加任何额外的权限吗?
此致。
从 SDK 23 开始,您 should/need 在调用位置 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()
,就是检查'you'(这个app)是否有正确的权限。还有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)
这是我的解决方案!
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);
}
我正在使用 android studio 并且 compileSdkVersion 是 23 因为我正在使用下面的代码
if(locationManager != null){
locationManager.removeUpdates(GPSListener.this);
}
停止 GPS 更新,其中 GPS 侦听器是 class,它实现了 LocationListener。
但是在 removeUpdates 行中我收到了 lint 警告
Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with
checkPermission
) or handle a potentialSecurityException
我不明白上面代码中的问题是什么。 需要在清单文件中添加任何额外的权限吗?
此致。
从 SDK 23 开始,您 should/need 在调用位置 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()
,就是检查'you'(这个app)是否有正确的权限。还有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)
这是我的解决方案!
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);
}