下面是一个示例代码,演示了如何在Android服务中等待来自广播接收器的响应:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 处理接收到的广播
// ...
// 发送响应广播
Intent responseIntent = new Intent("com.example.RESPONSE_ACTION");
responseIntent.putExtra("response_data", "Response data here");
context.sendBroadcast(responseIntent);
}
}
public class MyService extends Service {
private static final String TAG = "MyService";
private BroadcastReceiver responseReceiver;
private boolean isWaitingForResponse = false;
@Override
public void onCreate() {
super.onCreate();
// 创建响应广播接收器
responseReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 处理接收到的响应广播
String responseData = intent.getStringExtra("response_data");
Log.d(TAG, "Received response: " + responseData);
// 停止等待
isWaitingForResponse = false;
}
};
// 注册广播接收器
IntentFilter filter = new IntentFilter("com.example.RESPONSE_ACTION");
registerReceiver(responseReceiver, filter);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 启动定时器任务
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
// 发送请求广播
Intent requestIntent = new Intent("com.example.REQUEST_ACTION");
sendBroadcast(requestIntent);
// 开始等待响应
isWaitingForResponse = true;
}
};
// 每隔1秒执行任务
Timer timer = new Timer();
timer.schedule(timerTask, 0, 1000);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// 注销广播接收器
unregisterReceiver(responseReceiver);
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
上述代码中,MyService类是一个继承自Service的自定义服务类,它在onStartCommand()方法中启动了一个定时器任务,并发送了一个请求广播。在该类中,我们还创建了一个响应广播接收器,用于接收来自广播接收器的响应,并在接收到响应后停止等待。
MyBroadcastReceiver类是一个继承自BroadcastReceiver的自定义广播接收器类,它用于接收请求广播,并处理请求。在处理完请求后,它发送一个响应广播。
在AndroidManifest.xml文件中,我们声明了MyService类和MyBroadcastReceiver类,以便系统能够正确地启动服务和注册广播接收器。