2013-10-16 237 views
1

在我的主要活動中,我綁定了一項服務。Android廣播接收器,每次應用啓動時都會收到廣播

在服務中創建的廣播接收器被註冊
//main activity class 
    public void startNotificationService(){ 
    // add notice service 
    Context appContext = getApplicationContext(); 
    Intent intent = new Intent(appContext,NotificationService.class); 
    appContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE); 
} 

,所以當過Android框架發送一個廣播服務可以捕捉到它並推通知。

// service class 
    @Override 
    public void onCreate() { 
    handlerMessage = new UnsolicitedMessageHandler(); 
    IntentFilter intentFilter = new IntentFilter("disassociation"); 
    intentFilter.addAction("remediation"); 
    registerReceiver(new UnsolicitedMessageHandler(), intentFilter); 
} 

以下是手柄類廣播接收器

class UnsolicitedMessageHandler extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 
      String message; 
      if (action.equals("disassociation")) { 
       message = intent.getStringExtra("frameName"); 
       showNotification(R.drawable.disconnect, 
         "Disassocation Notification", message); 
      } 
      if (action.equals("remediation")) { 
       message = intent.getStringExtra("remMsg"); 
       showNotification(R.drawable.scan, "Remediation Notification", 
         message); 
      } 
     } 
    } 

一切工作正常,問題是,每一次當我殺死的應用程序和午餐一遍,廣播是通過UnsolicitedMessageHandler收到(我知道,系統絕對不會發送廣播) 這真是令人困惑和沮喪。任何人都可以幫助我?非常感謝。

回答

2

我認爲這是因爲每當你殺了並再次啓動你的應用程序,你會收到STICKY brodcast。

在onReceive中使用isInitialStickyBroadcast()來檢查當前正在處理的brodcast是否是STICKY。如果那是STICKY然後只是忽略,並沒有處理

+0

我發現一個很好的答案如何刪除STICKY意圖這裏http://stackoverflow.com/questions/11839043/android-how-can-i-completely-abort-除去粘性廣播。如果你的情況是STICKY意圖,然後使用鏈接中提到的解決方案之一 –

+0

非常感謝你Changdeo Jadhav,你救了我的一天!!!!!對我來說,粘性廣播實際上是由我自己發送的(我修改了Android框架類,在那裏發送粘性廣播),所以我可以將它修改爲普通廣播,問題應該解決。我應該對粘性廣播是什麼進行研究。謝謝! – SalutonMondo