如果未授予许可,我试图提示用户激活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。
您能告诉我为什么我为此虚假吗?
预先感谢您的帮助。
答案 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);