我希望我的移动应用程序是由Waze或Google地图应用程序中的“导航结束”触发的。在最简单的形式中,我希望我的应用程序在用户从导航应用程序收到“您已到达目的地”的通知时执行某些操作。
我意识到,至少在Android中,我可以通过创建一个意图来开始导航(在Waze或Google Maps应用程序中)。然后,我可以在我的应用程序中运行自己的接近传感器来等待用户的到来。然而,我想要更干净的东西--用户所需要的就是让我的应用程序在后台工作,然后让这个应用程序能够直接响应到达事件。
无论是iOS还是Android的解决方案都非常受欢迎。Hacky的解决方案也非常受欢迎。
谢谢
发布于 2015-07-21 14:30:42
一个简单的解决方案是在开始导航之前创建一个GeoFence。您可以使用在后台运行的intent服务监听Geofence.GEOFENCE_TRANSITION_ENTER事件。当此事件发生时,您可以从服务类中执行您需要执行的任何任务。同样的原理也可以在ios中实现:这里有一个在ios http://www.raywenderlich.com/95014/geofencing-ios-swift和android http://paulusworld.com/technical/android-geofences中实现Geofence的教程
发布于 2015-07-22 04:31:55
你可以做的一个非常棘手的事情(几乎不想发布这篇文章)是使用NotificationListenerService,并密切关注来自谷歌地图或waze的通知。
我认为只要你有权限,就应该让公众使用。
你必须为语言想出一些聪明的东西,也许是阅读谷歌地图/ waze应用程序中的资源,以确保你不会错过非英语的通知。
这对iOS来说可能也是可行的:https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Specification/Specification.html我没有使用iOS的watch Apis的个人经验,所以你必须自己去挖掘一下。
发布于 2015-07-24 03:37:38
这里唯一可能的解决方案是每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();
https://stackoverflow.com/questions/24511169
复制相似问题