在Waze或Google Maps for mobile中检测导航的结束

我希望我的移动应用可以通过Waze或Google地图应用中的“导航结束”来触发。 以最简单的forms,我希望我的应用程序在用户从导航应用程序获取“您已到达目的地”通知时执行某些操作。

我意识到,至less在Android中,我可以通过创build一个intent来启动导航(在Waze或Google Maps应用程序中)。 然后,我可以在我的应用程序中运行我自己的接近传感器,等待用户到达。 然而,我想要更清洁的东西 – 一个用户所需要的就是让我的应用程序在后台工作,然后让这个应用程序能够直接响应到达事件。

iOS或Android的解决scheme都非常受欢迎。 哈克解决scheme也非常受欢迎。

谢谢

一个简单的解决scheme就是在开始导航的意图之前创build一个GeoFence。 您可以使用在后台运行的意向服务来收听Geofence.GEOFENCE_TRANSITION_ENTER事件。 当这个事件发生时,你可以做任何你需要从服务类做的任务。 同样的原理也可以在ios中实现:这里是一个在ios中实现Geofence的教程http://www.raywenderlich.com/95014/geofencing-ios-swift和android http://paulusworld.com/technical/android -geofences

一个你可以做的超级黑客事情(几乎不想发布这个)将是使用NotificationListenerService,并留意谷歌地图或wa notifications中的通知。

http://developer.android.com/reference/android/service/notification/NotificationListenerService.html#nestedclasses

我认为只要你有权限,就应该让公众使用。

你将不得不考虑语言聪明的东西,也许从谷歌地图/ waze应用程序中读取资源,以确保你不会错过不是英文的通知。

这对于iOS来说也是可行的: https : //developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Specification/Specification.html我对于iOS的手表Apis没有个人经验你必须自己在那里挖。

这里唯一可能的解决scheme是每隔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 } } 

OR(不太优选)检查当前的前台应用程序:

 ActivityManager am = (ActivityManager) context .getSystemService(Activity.ACTIVITY_SERVICE); String packageName = am.getRunningTasks(1).get(0).topActivity .getPackageName(); 

在iOS中,我不确定您会从Google或Waze获得回电。 最好的方法是使用startMonitoringForRegion 。 如果您input区域(目的地),您的应用程序将收到回电。 如果你的应用程序没有运行,操作系统会启动你的应用 希望这会有所帮助