android - 无法通过奥利奥的网络提供商获取位置
问题描述
我想从 GPS 提供商和网络提供商那里获取位置。我写了下面的代码并且在 6 以下的 android 中正常工作,我在 android 4.2 中检查并且一切都是正确的,但是当我在 android 8 中检查直到 GPS 开启时,一切正常,我通过网络或 GPS 获取位置。但是当 GPS 关闭时,我无法通过网络提供商获取位置。我的问题是什么,我该如何解决?在 API 23+ 上,需要启用 GPS 以获取位置吗?我需要在我的设备设置中启用一个选项吗?
public void createLocation(){
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
gpsLocListener = new MyLocationListener();
networkLocListener = new MyLocationListener();
}
...
public static void checkLocation() {
if (Build.VERSION.SDK_INT >= 23) {
if ((ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) && ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, networkLocListener);
}
} else {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, networkLocListener);
}
if (!FIND_LOC_ByY_GPS) {
if (Build.VERSION.SDK_INT >= 23) {
if ((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)&& ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocListener); }
} else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocListener); }
//locationManager.requestLocationUpdates(locationManager.PASSIVE_PROVIDER,0,0,passiveLocListener);
}
}
public static class MyLocationListener implements LocationListener {
public MyLocationListener() {
}
@Override
public void onLocationChanged(Location location) {
if (location != null && !callLocationUpdate) {
//Speed
//if (calculateSpeedUser(location) < 13.8889) {
try {
removeLocationUpdate();
callLocationUpdate = true;
if (DEBUG_BASEACTIVITY)
Log.e("GPS Location Changed!", "onLocationChanged/BaseActivity");
} catch (SecurityException e) {
Log.e("PERMISSION_EXCEPTION", "PERMISSION_NOT_GRANTED");
}
//}
get_location_by_LocationUpdate_method = true;
doLocationUpdate(location, true);
getByLocationUpdate = true;
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}
解决方案
推荐阅读
- mybatis - 在mybatis上全局添加带有分布式跟踪id的sql注释
- javascript - 当登录用户为假时,React 上的 PrivateRoute 不会重定向
- python - 属性的魔术模拟设置值仅获取第一个值
- java - 使用 Selenium 选择 HTML5 输入 + 数据列表控件项
- sql - oracle 中计划作业的作业操作超过 4000 个字符
- c++ - 创建基于用户的图表
- sql - 在 SQL Server 中使用 JSON 连接/聚合字符串
- c# - 敏捷助手 Html 检索 p/段落文本,直到到达另一个锚点
- html - 在 CSS 中旋转 Meterhand
- javascript - 尝试将 base64 图像绘制到画布时出现 HTTP 错误 431