2014-05-24 52 views
0

我有從AlarmManager收到重複報警清單註冊的廣播接收器,我想通知服務時收到警報,我在思考一個監聽器設置爲廣播接收器,並調用這樣的監聽器:清單註冊的BroadcastReceiver如何與其他對象交互?

public class HeartbeatAlarmReceiver extends BroadcastReceiver { 

    private OnAlarmReceivedListener mListener; 

    public interface OnAlarmReceivedListener { 
     /** 
     * Callback to call when a heart beat alarm received. 
     */ 
     public void onHeartBeatAlarmReceived(); 
    } 

    public HeartbeatAlarmReceiver(OnAlarmReceivedListener listener) { 
     mListener = listener; 
    } 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     mListener.onHeartBeatAlarmReceived(); 
    } 
} 

但是,這需要一個帶參數的構造函數來設置偵聽器,但清單註冊的BroadcastReceiver似乎是由默認構造函數啓動的。我知道我可以通過給IntentFilter在代碼中註冊接收者,但出於某種原因,我必須使用明確的Intent來啓動接收者,這意味着我必須在清單中聲明它。 (見this)所以我該怎麼辦?

+1

**「我想在收到警報時通知服務」**:確定,只需在'onReceive(...)'方法中調用'context.startService(...)'傳遞一個'Intent'作爲'Intent'的附加數據。 – Squonk

+0

「出於某種原因,我必須使用明確的意圖啓動接收器」。這是爲什麼?爲安全考慮,請使用 – matiash

+0

。因爲隱式意圖可以由其他應用程序發送。 – teejoe

回答

0

你有兩個選擇:

  1. 你的廣播接收器可以叫你的服務。使用context.startService(intent)
  2. 當您爲報警製作PendingIntent時,可以直接爲服務製作報表,而不是爲BroadcastReceiver製作報表。使用PendingIntent.getService(...)
相關問題