我希望我的移动应用由Waze或Google地图应用中的“导航结束”触发。在最简单的形式中,我希望我的应用程序在用户从导航应用程序获得“您到达目的地”通知时执行某些操作。
我至少在Android中意识到,我可以通过创建意图来启动导航(在Waze或Google Maps应用中)。然后,我可以在我的应用程序中运行自己的接近传感器,等待用户到达。但是,我想要更清洁的东西 - 用户需要的一切就是让我的应用程序在后台运行,然后让这个应用程序能够直接响应到达事件。
iOS或Android的解决方案非常受欢迎。 Hacky解决方案也非常受欢迎。
由于
答案 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的通知。
我认为只要你获得许可,就应该让公众使用。
你将不得不考虑一些聪明的语言,也许从谷歌地图/ 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
。如果您输入地区(目的地),您的应用将收到回电。如果您的应用未运行,操作系统将启动您的应用程序。希望这会有所帮助