I have a BroadcastReceiver
in my app, and it was defined in AndroidManifest.xml
as below:
<receiver android:name=".receiver.MyTaskReceiver">
<intent-filter>
<action android:name="xxx.xxx.xxx" />
</intent-filter>
</receiver>
This is the MyTaskReceiver
code :
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();
}
}
When the receiver got a intent, I will do some general things first, like save data...
But if the specified activity is displayed to the user, I need to do change the activity's views, so I use the ReceiverListener
to do this. Set a listener to the MyTaskReceiver
in onCreate
and set null
in onDestroy
.
Then here comes an issue, how can to get the instance of the MyTaskReceiver
so that I can set a listener to it?
Or is there any other ways to achieve what I want ?
Thanks.
You can register receiver in your activity like this:
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
}
};
Hope it helps! :)
And remember to unregister your receiver (for example in onDestroy()
)
unregisterReceiver(this.broadcastReceiver);