即使我退出设定的GPS位置并且每2或1分钟递归发生一次,也会发出接近警报

时间:2010-12-14 12:05:57

标签: android alerts proximity

我最近开始研究接近警报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)){          发出用户不在办公区域的通知      }    } }

这是我在移动设备上测试它的方式,

  1. 在家里我设置半径为10米的gps位置。它给了我“用户在家里”的通知

  2. 当我离开那个半径时,它显示“用户离开了本地区域”消息。

  3. 现在,当我在办公室时,我设置半径为5米的gps位置。所以它给了我“用户在办公区域”的通知。 但是在这里我面临的是实际问题因为它显示每2个“主区域输入”和“办公区域输入”和“家庭区域退出”和“办公区退出”消息或1分钟的差距。我不明白为什么会发生这种情况。(甚至在我设置办公地点GPS之后我也没有走动。只是在同一点上待在那里......坐在我的办公桌座位上...... 。)

    我错过了还是在这里给了一些额外的东西?为什么警报出现在家附近,因为自从我离开家乡以来已经很长时间了?

    伙计们请帮助我(已经花了2周的时间:-()。感谢您的帮助。

  4. 感谢。

1 个答案:

答案 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)在系统的视角中占据相同的警报空间。因此两者都会被触发。也就是说,你总是在同一时间进出。