即使我退出设置的 GPS 位置并且每 2 或 1 分钟递归发生一次,接近警报也会触发
Posted
技术标签:
【中文标题】即使我退出设置的 GPS 位置并且每 2 或 1 分钟递归发生一次,接近警报也会触发【英文标题】:Proximity alerts are firing even I exit the set GPS location and occuring every 2 or 1 minute reccursively 【发布时间】:2011-05-25 05:57:48 【问题描述】:我最近开始研究接近警报应用程序。这基本上会根据用户的 GPS 位置更改铃声配置文件(最初只是振动或铃声)。我完成了编码部分。在“进入”和“退出”时,接近警报被触发并且已注册的 BroadcastReceiver 中的代码正在执行。到这一步还好。实际问题如下,(用我的示例代码行)
我为两个 Intent 操作注册了一个广播接收器。这些意图动作声明如下, public static final String INTENT_ACTION1 = "org.droidmania.action.PROXIMITYALERT"; public static final String INTENT_ACTION2 = "org.droidmania.action.PROXIMITYALERT2";
而 PendingIntent 部分为,
private void setProximityAlerts(String intentAction) 意图意图 = new Intent(); 意图.setAction(intentAction); //如果调用来自 HomeActivity,intentAction 将为 INTENT_ACTION1,否则为 INTENT_ACTION2
PendingIntent pIntent = PendingIntent.getBroascast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
locationManager.addProximityAlert(纬度,经度,vRadius,-1,pIntent);
现在是 BroadcastReceiver 代码,
类 ProxyReceiver 扩展 BroadcastReceiver @覆盖 public void onReceive(Context context,Intent intent) boolean isEnter = intent.getBooleanExtra(KEY_PROXIMITY_ENTERING,false);
if(isEnter)
**//if user is in Home location**
if(intent.getAction().equals(INTENT_ACTION1))
give the notification that user is in home area
**//if user is in Office location**
if(intent.getAction().equals(INTENT_ACTION2))
give the notification that user is in office area
别的 //如果用户不在家庭位置 if(intent.getAction().equals(INTENT_ACTION1)) 通知用户不在家庭区域 //如果用户不在办公室 if(intent.getAction().equals(INTENT_ACTION2)) 通知用户不在办公区域
这是我在移动设备上测试的方式,
在家里,我设置了 10m 半径的 gps 位置。它给了我“用户在家庭区域”的通知
当我不在该范围内时,它会显示“用户退出主区域”消息。
现在,当我在办公室时,我将 gps 位置设置为 5m 半径。所以它给了我“用户在办公区”的通知。 但在这里我面临实际问题,因为它显示 “进入家庭区域”和“进入办公区域”以及“退出家庭区域”和“退出办公区域”消息每 2 个或 1 分钟间隔。我不明白为什么会这样。(即使我在设置办公室位置 GPS 后也没有四处走动......只是呆在同一点......坐在我的办公桌座位上...... .)
我在这里遗漏或提供了额外的东西吗?为什么距离我离开家庭区域已经很长时间了,所以出现家庭邻近警报?
请大家帮帮我(我已经花了 2 周时间了 :-( )。感谢您的帮助。
谢谢。
【问题讨论】:
伙计们....任何猜测或想法为什么会发生? 嗨@poddroid:我们也在做同样的接近警报应用程序。当我们从那个位置离开时,我们很难收到退出消息。请如果你知道帮助我。这是邮件ID tamilmaran30 @gmail.com 【参考方案1】:ProximityAlerts 与参数(纬度、经度、半径、PendingIntent)一起存储,其中 PendingIntent 是它的标识符。
为了区分 PendingIntent,请使用 PendingIntent 的 requestCode 参数。
PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags);
所以在问题的getBroadcast 参数(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT)
中,将“0”替换为“home”PendingIntent 和“office”PendingIntent 的唯一整数。然后在您的addProximityAlert()
中注册每个 PendingIntent 及其自己的纬度/经度/半径。
未能使每个 PendingIntent 唯一会导致 ProxAlert1(lat1, lon1, rad1, PendInt1) 和 ProxAlert2(lat2, lon2, rad2, PendInt1) 在系统的视角中占据相同的警报空间。因此,两者都将在两个位置触发。也就是说,您总是同时进入和退出。
【讨论】:
如何在 BroadcastReceiver 的 onReceiver 中检索此请求代码以确定调用了哪个? 如果你注册到 PendingIntents 的 Intent 不相同,你可以使用访问器方法来解析作为 onReceive() 的第二个参数传入的 Intent。意图可以通过操作、数据、类型、类和类别来区分。 是的,我一定有一些旧的未决意图,这些意图是在此“请求代码”知识之前注册的,并且意图中的额外内容为空,但它现在可以工作了,谢谢以上是关于即使我退出设置的 GPS 位置并且每 2 或 1 分钟递归发生一次,接近警报也会触发的主要内容,如果未能解决你的问题,请参考以下文章