Что вызывает ошибку моего неполного объекта местоположения?

#java #android #location

#java #Android #Расположение

Вопрос:

Я пытаюсь создать макет службы GPS в приложении для Android. Я продолжаю сталкиваться со следующей ошибкой:

 java.lang.IllegalArgumentException: incomplete location object, missing timestamp or accuracy?
 

Я не вижу, как мой объект location является неполным, поскольку у меня есть как временная метка, так и точность, установленные в объекте.

 static LocationManager lm;
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void setMock(String mocLocationProvider, double latitude, double longitude){

        lm.addTestProvider(mocLocationProvider,
                false,
                false,
                false,
                false,
                true,
                true,
                true,
                1,
                2);


        Location loc = new Location(mocLocationProvider);
        Location mockLocation = new Location(mocLocationProvider); // a string
        mockLocation.setLatitude(latitude);  // double
        mockLocation.setLongitude(longitude);
        mockLocation.setAltitude(loc.getAltitude());
        mockLocation.setTime(System.currentTimeMillis());
        mockLocation.setAccuracy(1);
        mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
        mockLocation.setBearingAccuracyDegrees(0.1F);
        mockLocation.setVerticalAccuracyMeters(0.1F);
        mockLocation.setSpeedAccuracyMetersPerSecond(0.01F);
        lm.setTestProviderEnabled(mocLocationProvider, true);
        lm.setTestProviderLocation(mocLocationProvider, loc);
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    public int onStartCommand(Intent intent, int flags, int startId) {
                 lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                double[] rand_coords = random_location_generator();
                rand_gen_lat  = rand_coords[0];
                rand_gen_long = rand_coords[1];


                Criteria criteria = new Criteria();
                criteria.setAccuracy(Criteria.ACCURACY_FINE );

                setMock(LocationManager.GPS_PROVIDER, rand_gen_lat, rand_gen_long);
                setMock(LocationManager.NETWORK_PROVIDER, rand_gen_lat, rand_gen_long);

                startMockLocationUpdates();


        return START_STICKY;

    }
 

Как вы можете видеть, я установил свою точность и временную метку, так почему я все еще получаю эту ошибку? Надеюсь, я предоставил достаточно информации для постановки правильного диагноза. Спасибо.

Комментарии:

1. Вы заполняете mockLocation , но на самом деле никогда не используете его — вы хотели использовать его в setTestProviderLocation вызове?

2. @Andy Спасибо, я не могу поверить, что пропустил это!