Макет локации на Android 8.0 (Oreo)
У меня есть приложение (назовите его A), которое запускает службу, которая проверяет местоположение, полученное от Bluetooth GPS, чтобы использовать его в другом приложении (назовите его B):
- A (с услугой, которая получает местоположение Bluetooth Bluetooth)
- Макет местоположения в системе Android
- 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
разрешение, и приложение может макетировать местоположение в настройках разработчика.
Что я делаю неправильно?
Заранее спасибо и хорошего дня.
0 ответов
Кажется, есть ошибка на экране настроек разработчика (Samsung?) В Oreo. Я также настроил свое приложение как провайдер макетов и с разрешением в манифесте. Для меня проблема была решена удалением приложения в качестве провайдера фиктивного местоположения и его повторным добавлением:
Developer options -> Mock location app -> No apps
Developer options -> Mock location app -> Your app
Тем не менее, я все еще вижу эти сообщения в журнале:
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