即使我的GPS已关闭,checkSelfPermission(context,Manifest.permission.ACCESS_FINE_LOCATION)也会返回true

时间:2019-06-13 21:19:49

标签: android permissions location

如果未授予许可,我试图提示用户激活GPS。 我无法进入请求部分,因为即使我的GPS关闭,支票也总是返回true。

这是我的代码:

if (ContextCompat.checkSelfPermission(context, ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(getActivity(), new String[]{ACCESS_FINE_LOCATION}, 1);
}

由于GPS处于关闭状态,我希望条件返回true,但是相反,它将返回false。

您能告诉我为什么我为此虚假吗?

预先感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

如果用户已向您的应用授予对ContextCompat.checkSelfPermission的权限,则

true返回ACCESS_FINE_LOCATION。它与设备上GPS的状态无关。选中此link,以获取有关其工作原理的更多信息。

但是,如果要访问或检测GPS的当前状态(在应用程序中是打开还是关闭),则可以使用以下代码来实现:

if ( (context.getSystemService(Context.LOCATION_SERVICE) as LocationManager).isProviderEnabled(LocationManager.GPS_PROVIDER) ) 
{
  //gps is on in the device
}

答案 1 :(得分:1)

正如Payam所说,“启用GPS”和“检查位置许可”是两件事。您始终可以通过手机设置打开GPS位置。但是要使用location api,您必须获得代码中的权限。

另一件事,如果您手机的Android版本为6.0或更高版本,则需要使用checkSelfPermissions()方法以及清单文件中的内容来显式获取权限。 但是,如果您的Android版本低于6.0,则只需在android Manifest中添加权限。
如果我的答案对您有帮助,请单击我答案左侧的“刻度线”符号以接受我的答案。

答案 2 :(得分:1)

您正在要求用户授予您的应用位置权限。要打开GPS,您需要另一个代码,因此在获得true值之后,请执行以下操作:

Intent gpsOptionsIntent = new Intent(  
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);  
startActivity(gpsOptionsIntent);