После сброса программного обеспечения на телефоне я снова получил значения точности ниже 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()));
    }

}

Ответы на вопрос(0)

Ваш ответ на вопрос