Обнаружение конца навигации в Waze или Google Maps для мобильных устройств
Я хочу, чтобы мое мобильное приложение запускалось с помощью "завершения навигации" в любом приложении Waze или Google Maps. В нем простейшая форма, я хотел бы, чтобы мое приложение что-то делало, когда пользователь получил уведомление "Вы пришли в свое место назначения" из навигационного приложения.
Я понимаю, по крайней мере, в Android, что я могу начать навигацию (либо в Waze, либо в приложении Google Maps), создав намерение. Затем я могу запустить свой собственный датчик приближения в своем приложении, чтобы ждать прибытия пользователя. Тем не менее, я хотел что-то гораздо более чистое - ситуация, когда все, что требуется от пользователя, - это заставить мое приложение работать в фоновом режиме, а затем для этого приложения иметь возможность напрямую реагировать на событие прибытия.
Решения в iOS или Android очень приветствуются. Hacky-решения также приветствуются.
Спасибо
Ответы
Ответ 1
Простым решением будет создание GeoFence непосредственно перед запуском намерения для навигации. Вы можете прослушивать событие Geofence.GEOFENCE_TRANSITION_ENTER, используя службу намерений, работающую в фоновом режиме. Когда это событие произойдет, вы можете сделать все, что вам нужно сделать из класса обслуживания. Этот же принцип может быть реализован и в ios:
Вот учебник по внедрению Geofence в ios http://www.raywenderlich.com/95014/geofencing-ios-swift и в android http://paulusworld.com/technical/android-geofences
Ответ 2
Супер хакерская вещь, которую вы могли бы сделать (почти не хотите публиковать это), заключалась бы в использовании NotificationListenerService и слежении за уведомлениями с карт google или waze.
http://developer.android.com/reference/android/service/notification/NotificationListenerService.html#nestedclasses
Я думаю, что это должно публично использовать, пока у вас есть разрешение.
Вам нужно будет подумать о чем-то умном для языков, возможно, о чтении ресурсов из приложений google maps/waze, чтобы вы не пропустили уведомления, которые не написаны на английском языке.
Это может быть жизнеспособным и для iOS: https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Specification/Specification.html У меня нет личного опыта работы с часами Apis для iOS, вам придется копаться там сами.
Ответ 3
Единственное возможное решение здесь - опросить активные действия (переднего плана) каждые X секунд и действовать оттуда. Вы можете сделать это с помощью службы и тревоги.
Вы можете сделать это следующими способами:
Проверить текущие запущенные процессы:
ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> processes = manager.getRunningAppProcesses();
for (RunningAppProcessInfo process : processes) {
if (processName.equals(process.processName)) {
// do your thing
}
}
ИЛИ (менее предпочтительно) проверьте текущее приложение переднего плана:
ActivityManager am = (ActivityManager) context
.getSystemService(Activity.ACTIVITY_SERVICE);
String packageName = am.getRunningTasks(1).get(0).topActivity
.getPackageName();
Ответ 4
В iOS я не уверен, что вы получите звонок из Google или Waze. лучший способ - использовать startMonitoringForRegion
. если вы введете регион (пункт назначения), ваше приложение получит обратный вызов. если ваше приложение не работает, ОС запустит ваше приложение. надеюсь, что это поможет