2016-07-26 129 views
2

定義我在我的應用程序一個BroadcastReceiver了`BroadcastReceiver`實例,它是在AndroidManifest.xml定義如下:如何獲得它在`AndroidManifest.xml`

<receiver android:name=".receiver.MyTaskReceiver"> 
    <intent-filter> 
     <action android:name="xxx.xxx.xxx" /> 
    </intent-filter> 
</receiver> 

這是MyTaskReceiver代碼:

public class MyTaskReceiver extends BroadcastReceiver { 

    private ReceiverListener listener ; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     //do general things 

     if(listener != null) { 
      listener.received(); //do special things if the listener is setted up. 
     } 
    } 

    public void setListener(ReceiverListener listener) { 
     this.listener = listener; 
    } 

    public interface ReceiverListener { 
     void received(); 
    } 

} 

當接收器有一個意向,我會做一些一般的東西首先,像保存數據...

但如果指定的活動我顯示給用戶,我需要改變活動的意見,所以我使用ReceiverListener來做到這一點。將收聽者設置爲onCreate中的MyTaskReceiver,並在onDestroy中設置null

然後出現一個問題,如何獲取MyTaskReceiver的實例,以便我可以設置一個監聽器?

或者還有其他方法可以實現我想要的嗎?

謝謝。

+0

你不需要參照接收器,當它在清單文件中定義。只需處理您的BroadcastReceiver類中的意圖即可。 – Talha

+1

不幸的是,這不是接收器的工作原理。實例將被創建,'intent'被傳遞給'onReceived',然後被銷燬。你不能註冊監聽者。看看@Natalia的答案。這似乎是你在找什麼。 – Budius

+0

@Budius您的評論是我想要的答案,謝謝。 –

回答

4

您可以像這樣在你的活動註冊接收器:

private void registerBroadcastReceiver() { 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.addAction(xxx.xxx.xxx); 
    registerReceiver(this.broadcastReceiver, intentFilter); 
} 

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle extras = intent.getExtras(); 
     //do whatever need to be done 
    } 
}; 

希望它能幫助! :)

記住註銷您的接收器(例如在onDestroy()

unregisterReceiver(this.broadcastReceiver); 
+1

我知道我可以在活動中註冊BroadcastReceiver,但我的接收器不依賴於特殊活動,我需要它在應用程序運行時運行而不是活動正在運行。並且謝謝:) –