我使用的是android studio,而compileSdkVersion是23 因为我使用下面的代码
if(locationManager != null){
locationManager.removeUpdates(GPSListener.this);
}
停止gps更新,其中GPS Listener是一个实现LocationListener的类。
但是在removeUpdates行中我得到了lint警告
呼叫需要用户可能拒绝的权限:代码应该 明确检查是否有权限(使用
checkPermission
)或处理潜在的SecurityException
我没有得到上述代码中的问题。 需要在清单文件中添加任何额外的权限吗?。
问候。
答案 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()
,用于检查另一个进程是否具有正确的权限。
备注强>
ContextCompat.checkSelfPermission()
代替(感谢JerryBrady)答案 1 :(得分:14)
我无法使用checkSelfPermission()
,因为我的最低API为14,需要23。知道这一点,您还可以try
到catch
一个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);
}