我最近开始研究接近警报App。这基本上根据用户的GPS位置改变铃声配置文件(只是振动或铃声)。我完成了编码部分。在“进入”和“退出”时,接近警报被触发,并且已注册的BroadcastReceiver中的代码正在执行。直到这一点,它很好。实际问题如下(使用我的示例代码行)
我为两个Intent动作注册了一个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){ Intent intent = new Intent(); 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代码,
class 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
}
}
其他{
//如果用户不在本地位置
如果(intent.getAction()。等于(INTENT_ACTION1)){
发出用户不在家的区域的通知
}
//如果用户不在办公室位置
如果(intent.getAction()。等于(INTENT_ACTION2)){
发出用户不在办公区域的通知
}
}
}
这是我在移动设备上测试它的方式,
在家里我设置半径为10米的gps位置。它给了我“用户在家里”的通知
当我离开那个半径时,它显示“用户离开了本地区域”消息。
现在,当我在办公室时,我设置半径为5米的gps位置。所以它给了我“用户在办公区域”的通知。 但是在这里我面临的是实际问题因为它显示每2个“主区域输入”和“办公区域输入”和“家庭区域退出”和“办公区退出”消息或1分钟的差距。我不明白为什么会发生这种情况。(甚至在我设置办公地点GPS之后我也没有走动。只是在同一点上待在那里......坐在我的办公桌座位上...... 。)
我错过了还是在这里给了一些额外的东西?为什么警报出现在家附近,因为自从我离开家乡以来已经很长时间了?
伙计们请帮助我(已经花了2周的时间:-()。感谢您的帮助。
感谢。
答案 0 :(得分:2)
ProximityAlerts与参数(纬度,经度,半径,PendingIntent)一起存储,其中PendingIntent是其标识符。
为了区分PendingIntents,请使用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及其自己的lat / lon / radius。
未能使每个PendingIntent唯一导致ProxAlert1(lat1,lon1,rad1,PendInt1)和ProxAlert2(lat2,lon2,rad2,PendInt1)在系统的视角中占据相同的警报空间。因此两者都会被触发。也就是说,你总是在同一时间进出。