将数据从 BroadcastReceiver 传递到服务
passing data from BroadcastReceiver to Service
我的目标是创建一个从广播接收器获取数据的方法。
我有一个注册 BroadcastReceiver 来监控电池插拔的服务。我如何从 BroadcastReceiver 获取数据?我想在此服务中接收数据 class:
服务:
public class myService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
registerReceivers();
return START_NOT_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
private synchronized void registerReceivers() {
IntentFilter chargeFilter = new IntentFilter( Intent.ACTION_POWER_CONNECTED );
chargeFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
registerReceiver(eCharge, chargeFilter);
}
}
这是接收方:
public class EventCharge extends BroadcastReceiver {
private static String TAG = "Event Charge";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
String messagge = "PS: " + ((action == Intent.ACTION_POWER_CONNECTED) ? "C" : "D") + " [ usb: " + usbCharge + " ac: " + acCharge + " ]";
Log.e(TAG, messagge );
}
}
有解决办法吗?
在receiver中,你可以把所有的params放到一个Bundle中,然后使用包含那个bundle的startService(Intent)来调用目标服务。在服务中,您解析包并获取所有参数。
在广播接收器中,
Intent intent = new Intent(Constants.BROADCAST_DETECTED_ACTIVITY);
// Data you need to pass to activity
intent.putExtra("type",Type);
context.sendBroadcast(intent);
服役中,
registerReceiver(broadcastReceiver, new IntentFilter(Constants.BROADCAST_DETECTED_ACTIVITY));
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(BROADCAST_DETECTED_ACTIVITY)) {
int type = intent.getIntExtra("type", 0);
}
}
};
我的目标是创建一个从广播接收器获取数据的方法。
我有一个注册 BroadcastReceiver 来监控电池插拔的服务。我如何从 BroadcastReceiver 获取数据?我想在此服务中接收数据 class:
服务:
public class myService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
registerReceivers();
return START_NOT_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
private synchronized void registerReceivers() {
IntentFilter chargeFilter = new IntentFilter( Intent.ACTION_POWER_CONNECTED );
chargeFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);
registerReceiver(eCharge, chargeFilter);
}
}
这是接收方:
public class EventCharge extends BroadcastReceiver {
private static String TAG = "Event Charge";
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;
boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;
String messagge = "PS: " + ((action == Intent.ACTION_POWER_CONNECTED) ? "C" : "D") + " [ usb: " + usbCharge + " ac: " + acCharge + " ]";
Log.e(TAG, messagge );
}
}
有解决办法吗?
在receiver中,你可以把所有的params放到一个Bundle中,然后使用包含那个bundle的startService(Intent)来调用目标服务。在服务中,您解析包并获取所有参数。
在广播接收器中,
Intent intent = new Intent(Constants.BROADCAST_DETECTED_ACTIVITY);
// Data you need to pass to activity
intent.putExtra("type",Type);
context.sendBroadcast(intent);
服役中,
registerReceiver(broadcastReceiver, new IntentFilter(Constants.BROADCAST_DETECTED_ACTIVITY));
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(BROADCAST_DETECTED_ACTIVITY)) {
int type = intent.getIntExtra("type", 0);
}
}
};