Макет локации на Android 8.0 (Oreo) - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть приложение (назовите его A), которое запускает службу, которая проверяет местоположение, полученное от Bluetooth GPS, чтобы использовать его в другом приложении (назовите его B):

  1. A (с услугой, которая получает местоположение Bluetooth Bluetooth)
  2. Макет местоположения в системе Android
  3. B (получить местоположение из системы Android)

Все работает на Android 7.0, но вВ Android 8.0 (Oreo) приложение B не считывает местоположение, полученное от блютуса, то есть, я думаю, из-за проблемы с поддельным местоположением, потому что журнал всегда печатает эту строку:

E PassiveLocationListener_FLP: isFromMockProvider, return

Код, который я использую, чтобы смоделировать местоположение:

 private void changeToMockLocation() {
    Log.i(TAG, "changeToMockLocation()");

    Location newLocation = new Location(PROVIDER_NAME);
    newLocation.setLatitude(mNMEAData.getLatitude());
    newLocation.setLongitude(mNMEAData.getLongitude());
    newLocation.setAccuracy(mNMEAData.getAccuracy());
    newLocation.setTime(System.currentTimeMillis());

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        newLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
    }

    // Set mock location.
    if (ActivityCompat.checkSelfPermission(
            mContext, android.Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
        try {
            mLocationManager.setTestProviderLocation(PROVIDER_NAME, newLocation);
        } catch (Exception e) {
            Log.e(TAG, "Error while setting test provider location: " + e);
        }
    }
}

Дело в том, что я не вижу напечатанного исключения, поэтому я думаю, что процесс правильный, но Android не позволяет мнесделать это по какой-то причине я не могу понять.

В манифесте я объявил разрешение ALLOW_MOCK_LOCATION, и приложение может смоделировать местоположение в Настройки разработчика .

Что я делаю?ong?

Заранее спасибо и хорошего дня.

1 Ответ

0 голосов
/ 15 марта 2019

Кажется, что есть ошибка на экране настроек разработчика (Samsung?) В Oreo.Я также настроил свое приложение как фиктивный провайдер и с разрешения в манифесте.Для меня проблема была решена путем удаления приложения в качестве поставщика фиктивного местоположения и добавления его снова:

Developer options -> Mock location app -> No apps
Developer options -> Mock location app -> Your app

Я все еще вижу эти сообщения в logcat:

E/PassiveLocationListener_FLP: isFromMockProvider, return
I/LocationManagerService: remove xxxxxxx 
I/LocationManagerService: removeUpdates, receiver.requestedID = xxxxxxx, receiver.mIdentity.mPid = 2908, receiver.mIdentity.mUid = 1000
D/SLocation: removeGpsStatusListener
D/ListenerMonitor_FLP: removeListener, not existed listener android, xxxxxxx in mListenerIdMap
E/RequestManager_FLP: [LocationManagerService] Location remove xxxxxxx from system
...