Я хочу узнать местоположение у провайдера GPS и провайдера сети.Я написал ниже код и работает правильно в Android ниже 6, и я проверил в 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) {
}
}