Контекст:
Я использовал FusedLocationProviderClient
, чтобы узнать местоположение пользователя.Когда телефон находится в режиме высокой точности, все работает как положено.Однако не все телефоны имеют высокую точность.Итак, как мне получить местоположение пользователя только по GPS
Что я пробовал до сих пор:
1 - пробовал с помощью FusedLocationProviderClient
:
providerClient = LocationServices.getFusedLocationProviderClient(this);
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
super.onLocationResult(locationResult);
Log.e(TAG,"CALLBACK RECEIVED");
processNewLocation(locationResult.getLastLocation());
}
};
locationRequest = new LocationRequest();
locationRequest.setInterval(LocationConstant.UPDATE_INTERVAL_IN_MILLISECONDS);
locationRequest.setFastestInterval(LocationConstant.FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
providerClient.requestLocationUpdates(locationRequest,
locationCallback, Looper.myLooper());
Когда местоположение находится в Device Only, обратный вызов местоположения никогда не вызывается, но работает отлично, если он с высокой точностью (также изменено setPriority()
для каждого приоритета и не повезло).
2-пробовал это с Location Manager:
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new MyLocationListener());
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new MyLocationListener());
locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, new MyLocationListener());
private class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
String message = String.format(
"New Location \n Longitude: %1$s \n Latitude: %2$s",
location.getLongitude(), location.getLatitude()
);
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
public void onStatusChanged(String s, int i, Bundle b) {
Toast.makeText(MainActivity.this, "Provider status changed",
Toast.LENGTH_LONG).show();
}
public void onProviderDisabled(String s) {
Toast.makeText(MainActivity.this,
"Provider disabled by the user. GPS turned off",
Toast.LENGTH_LONG).show();
}
public void onProviderEnabled(String s) {
Toast.makeText(MainActivity.this,
"Provider enabled by the user. GPS turned on",
Toast.LENGTH_LONG).show();
}
}
Все тот же результат