检测Waze或Google地图移动版中的导航结束

时间:2014-07-01 13:11:00

标签: android ios google-maps

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

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

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

由于

4 个答案:

答案 0 :(得分:3)

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

中实现Geofence的教程

答案 1 :(得分:3)

你可以做的超级hacky(几乎不想发布这个)就是使用NotificationListenerService并留意谷歌地图或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我对手表Apis for iOS没有个人经验,所以你必须自己去挖掘。

答案 2 :(得分:0)

这里唯一可行的解​​决方案是每X秒轮询一次活动活动(前景活动)并从那里开始行动。您可以通过服务和闹钟来完成。

您可以通过以下方式完成此操作:

检查当前正在运行的进程:

class SpecificationMap : ClassMap<Specification>
{
    public SpecificationMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.Value);
        References(x => x.Product).Column("ProductReferenceId").Cascade.All();
    }
}

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

 ActivityManager manager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> processes = manager.getRunningAppProcesses();
    for (RunningAppProcessInfo process : processes) {
       if (processName.equals(process.processName)) {
           // do your thing
       }
    }

答案 3 :(得分:0)

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