Android Studio添加权限检查错误?

时间:2016-04-28 08:51:36

标签: android android-studio android-permissions

好的,我在AS中有以下代码和警告: enter image description here

当我同意添加此类支票时,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运营商正在使用?
如果用户只拒绝上述权限之一,那么此类检查将不起作用,就像我一样。

或者我错过了什么?

2 个答案:

答案 0 :(得分:1)

您可以通过不同方式获取位置。使用LocationManager.GPS_PROVIDER从网络使用LocationManager.NETWORK_PROVIDERLocationManager.PASSIVE_PROVIDER(GPS)从GPS获取。

permission.ACCESS_FINE_LOCATIONGPS_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