После сброса программного обеспечения на телефоне я снова получил значения точности ниже 10. Но опять же после x количества обновлений местоположения число точности ограничено 10.0m. Я должен сказать, что мой GPS предназначен для работы в качестве переднего плана до, возможно, 3,5 часа одновременно. И да, я знаю, что это разряжает батарею.
ема:
Я пытался использовать новыйFusedLocationProviderClient
и устарелFusedLocationApi
получать обновления местоположения в моем приложении, используяSony Xperia Z2 а такжеHuawei Honor 8, Все отлично работает изначально. Однако, похоже, что после x количество местоположений запрашивает число точностиНИКОГДА падает ниже 10,0 с помощьюlocation.getAccuracy(); // 10.0
Что я пробовал:
Удаление и переустановка приложения не имеет значения. Перезагрузка телефона, тот же результат. даLocationRequest.PRIORITY_HIGH_ACCURACY
... нет другого результата.
Что могло бы сработать:
Сделал сброс к заводским настройкам. Whooppaa вдруг я теперь получаю числа ниже 10,0, как и ожидалось с ясными условиями снаружи Но почему??
Вопрос:
Я подозреваю, что система ограничивает мою точность после x количества обновлений местоположения (чтобы сэкономить батарею ???) ... Что вы думаете, ребята? В чем может быть проблема здесь?
РЕДАКТИРОВАТЬ:
После сброса программного обеспечения на телефоне я снова получил значения точности ниже 10. Но опять же после x количества обновлений местоположения число точности ограничено 10.0m. Я должен сказать, что мой GPS предназначен для работы в качестве переднего плана до, возможно, 3,5 часа одновременно. И да, я знаю, что это разряжает батарею.
public class GPSServiceNew extends Service{
private FusedLocationProviderClient mFusedLocationClient;
private LocationRequest mLocationRequest;
private long UPDATE_INTERVAL = 10 * 1000; /* 10 secs */
private long FASTEST_INTERVAL = 2000; /* 2 sec */
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String test = "";
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
super.onCreate();
mFusedLocationClient = getFusedLocationProviderClient(this);
startLocationUpdates();
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
notificationIntent, 0);
Notification notification = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher_round)
.setContentTitle("My Awesome App")
.setContentText("Doing some work...")
.setContentIntent(pendingIntent).build();
startForeground(100, notification);
}
// Trigger new location updates at interval
@SuppressLint("MissingPermission")
protected void startLocationUpdates() {
// Create the location request to start receiving updates
mLocationRequest = new LocationRequest();
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationRequest.setInterval(UPDATE_INTERVAL);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
// Create LocationSettingsRequest object using location request
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(mLocationRequest);
LocationSettingsRequest locationSettingsRequest = builder.build();
// Check whether location settings are satisfied
// https://developers.google.com/android/reference/com/google/android/gms/location/SettingsClient
SettingsClient settingsClient = LocationServices.getSettingsClient(this);
settingsClient.checkLocationSettings(locationSettingsRequest);
// new Google API SDK v11 uses getFusedLocationProviderClient(this)
getFusedLocationProviderClient(this).requestLocationUpdates(mLocationRequest, new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
// do work here
onLocationChanged(locationResult.getLastLocation());
}
},
Looper.myLooper());
}
public void onLocationChanged(Location location) {
// New location has now been determined
String msg = "Updated Location: " +
String.valueOf(location.getAccuracy());
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
// You can now create a LatLng Object for use with maps
LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
Log.d("GPS: ", String.valueOf(location.getAccuracy()));
}
}