当我同意添加此类支票时,AS会插入以下代码:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return TODO;
}
我只是想知道,为什么AND运营商正在使用?
如果用户只拒绝上述权限之一,那么此类检查将不起作用,就像我一样。
或者我错过了什么?
答案 0 :(得分:1)
您可以通过不同方式获取位置。使用LocationManager.GPS_PROVIDER
从网络使用LocationManager.NETWORK_PROVIDER
和LocationManager.PASSIVE_PROVIDER
(GPS)从GPS获取。
permission.ACCESS_FINE_LOCATION
和GPS_PROVIDER
需要 PASSIVE_PROVIDER
。
permission.ACCESS_COARSE_LOCATION
需要 NETWORK_PROVIDER
根据doc:
注意:如果您同时使用NETWORK_PROVIDER和GPS_PROVIDER 您只需要请求ACCESS_FINE_LOCATION权限,因为 它包括两个提供商的许可。 (许可 ACCESS_COARSE_LOCATION仅包含NETWORK_PROVIDER的权限。)
因此,Android Studio可能不会检查您是否同时使用它们,因此它可以安全地检查
答案 1 :(得分:1)
您无需检查这两种权限。即使只有精确的位置访问被拒绝,另一个被自动拒绝,反之亦然。 Bothe来自同一组 - 位置 http://developer.android.com/guide/topics/security/permissions.html#normal-dangerous