检测导航结束在Waze或谷歌地图的移动



我希望我的移动应用程序被触发的"结束导航"在Waze或谷歌地图应用程序。在它的最简单的形式,我希望我的应用程序做一些事情,当用户得到"你已经到达你的目的地"通知从导航应用程序。

我意识到,至少在Android中,我可以通过创建一个意图来启动导航(无论是在Waze还是谷歌地图应用程序中)。然后,我可以在我的应用程序中运行我自己的接近传感器,等待用户到达。然而,我想要一些更干净的东西——用户所需要的只是让我的应用程序在后台工作,然后让这个应用程序能够直接响应到达的事件。

iOS或Android的解决方案都非常受欢迎。Hacky的解决方案也非常受欢迎。

谢谢

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

你可以做的一个超级黑客的事情(几乎不想发布这个)是使用NotificationListenerService并留意来自google地图或waze的通知。

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手表api的经验,所以你必须自己去挖掘。

唯一可能的解决方案是每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();

在iOS中,我不确定你会收到谷歌或Waze的回电。最好的方法是使用startMonitoringForRegion。如果你输入区域(目的地),你的应用程序将得到一个回调。如果你的应用程序没有运行OS将启动你的应用程序。希望对大家有所帮助

最新更新