BroadcastReceiver 如何与 Service 通信
How BroadcastReceiver can communicate with Service
BroadCastReciever 如何在不绑定的情况下与服务通信?
我认为在 BroadCastReceiver 中使用活页夹是个好主意,但在阅读了一些信息后,我明白这不是一个好主意。
我试图在 Whosebug 中查找问题,但我发现的是:
问:"BroadCastReciver + binder"
A:"No, it is bad idea."(没有举例说明如何在没有binder的情况下与服务通信)
解决方案 - LocalBroadcastManager。
感谢 LocalBroadcastManager,我们可以在应用程序的不同部分之间发送广播。
SEND_BROADCAST
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context);
IntentFilter filter = new IntentFilter("com.onezero.EXAMPLE_ACTION");
localBroadcastManager.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "=(", Toast.LENGTH_SHORT).show();
}
}, filter);
Intent sintent = new Intent("com.onezero.EXAMPLE_ACTION");
localBroadcastManager.sendBroadcast(sintent);
接收广播
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter filter = new IntentFilter("com.onezero.EXAMPLE_ACTION");
localBroadcastManager.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// DO WORK
setPlayPause(); //PAUSE MEDIAPLAYER IN MY CASE
}
}, filter);
BroadCastReciever 如何在不绑定的情况下与服务通信?
我认为在 BroadCastReceiver 中使用活页夹是个好主意,但在阅读了一些信息后,我明白这不是一个好主意。 我试图在 Whosebug 中查找问题,但我发现的是:
问:"BroadCastReciver + binder"
A:"No, it is bad idea."(没有举例说明如何在没有binder的情况下与服务通信)
解决方案 - LocalBroadcastManager。 感谢 LocalBroadcastManager,我们可以在应用程序的不同部分之间发送广播。
SEND_BROADCAST
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context);
IntentFilter filter = new IntentFilter("com.onezero.EXAMPLE_ACTION");
localBroadcastManager.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "=(", Toast.LENGTH_SHORT).show();
}
}, filter);
Intent sintent = new Intent("com.onezero.EXAMPLE_ACTION");
localBroadcastManager.sendBroadcast(sintent);
接收广播
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter filter = new IntentFilter("com.onezero.EXAMPLE_ACTION");
localBroadcastManager.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// DO WORK
setPlayPause(); //PAUSE MEDIAPLAYER IN MY CASE
}
}, filter);