2010-12-14 41 views
0

我最近開始研究接近警報應用程序。這基於用戶的GPS位置基本上改變鈴聲簡檔(僅振動或鈴音)。我完成了編碼部分。在「進入」和「退出」接近警報正在被解僱,並且已註冊的BroadcastReceiver中的代碼正在執行。直到這一點,它是好的。實際問題如下(用我的示例代碼行)即使我退出設置的GPS位置並每隔2分鐘或1分鐘發生接近警報也會發射

我註冊了一個廣播接收器用於兩個意圖操作。這些意圖操作聲明如下, public static final String INTENT_ACTION1 =「org.droidmania.action。PROXIMITYALERT」; public static final String INTENT_ACTION2 =「org.droidmania.action。PROXIMITYALERT2」;

而部分的PendingIntent是,

私人無效setProximityAlerts(字符串intentAction){ 意圖意圖=新意圖(); intent.setAction(intentAction); //在情況下,呼叫來自HomeActivity intentAction將別的INTENT_ACTION1 INTENT_ACTION2

的PendingIntent pIntent = PendingIntent.getBroascast(上下文,0,意圖, PendingIntent.FLAG_CANCEL_CURRENT);

locationManager.addProximityAlert(latitude,longitude,vRadius,-1,pIntent); }

現在的BroadcastReceiver代碼,

類ProxyReceiver延伸的BroadcastReceiver { @Override 公共無效的onReceive(上下文範圍內,意圖意圖){
布爾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周時間,我花了:-()。您的幫助表示讚賞。

感謝。

+0

夥計們......任何猜測或想法爲什麼會發生? – poddroid 2010-12-15 10:23:31

+0

嗨@poddroid:我們也在做這個相同的近距離警報app.here我們很難得到退出消息,當我們離開那個位置。請如果你知道幫助我。這是郵件編號[email protected] – tamil 2013-03-27 08:32:20

回答

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及其自己的經緯度/半徑。

未能使每個PendingIntent唯一導致ProxAlert1(lat1,lon1,rad1,PendInt1)和ProxAlert2(lat2,lon2,rad2,PendInt1)在系統透視圖中佔據相同的警報空間。所以兩個地方都會觸發。也就是說,你總是同時進入和退出。

+0

如何我在BroadcastReceiver的onReceiver中檢索這個請求代碼來找出哪一個被調用? – urSus 2013-04-02 22:21:12

+0

如果您向PendingIntents註冊的Intents不相同,則可以使用訪問器方法來解析作爲onReceive()的第二個參數傳入的Intent。意圖可以通過行爲,數據,類型,類別和類別來區分。 – Nolnoch 2013-04-03 00:02:16

+0

是的,我必須有一些在此「請求代碼」知識之前註冊的未決意圖,而意向中的附加內容爲空,但現在可行,謝謝 – urSus 2013-04-03 10:59:03