У меня есть приложение (назовите его 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
, и приложение может смоделировать местоположение в Настройки разработчика .
Что я делаю?ong?
Заранее спасибо и хорошего дня.