我们可以使用BroadcastReceiver 或ResultReceiver 来接收来自Service 的结果。这一次,我想指导你使用ResultReceiver:
首先,创建一个类以在您的活动中接收结果并扩展ResultReceiver:
private class MyReceiver extends ResultReceiver {
public MyReceiver(Handler handler) {
super(handler);
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData);
/*
* We can get the type of data passed from Service to Activity:
* int --> getInt("key")
* String --> getString("key")
* boolean --> getBoolean("key")
* /
if (resultCode == MyService.RUNNING) {
String str = resultData.getString("dataStringKey"); // get information within the key, i.e. "dataString"
myTextView.setText(str); // set the text to get the data received
}
if (resultCode == MyService.SERVICE_STOPPED) {
// do something, such as get data received with the key
}
}
}
在你的Service:
public static final int RUNNING = 0;
public static final int SERVICE_DESTROYED = 1;
private ResultReceiver receiver;
private Bundle resultData;
private int status;
@Override
public void onCreate() {
super.onCreate();
resultData = new Bundle();
status = RUNNING;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
receiver = intent.getParcelableExtra("receiver");
String dataFromActivity = intent.getStringExtra("text");
/*
* send result/information to activity, also we can put:
* int --> putInt("key", value)
* boolean --> putBoolean("key", value)
* String --> putString("key", "My string.")
* /
resultData.putString("dataStringKey", "Hi, this is a String data.");
receiver.send(status, resultData);
return Service.START_NOT_STICKY;
}
@Override
public void onDestroy() {
status = SERVICE_DESTROYED;
receiver.send(status, resultData);
super.onDestroy();
}
当你触发Service:
Intent intent = new Intent(MyActivity.this, MyService.class);
intent.putExtra("text", "Text to be passed to Service.");
intent.putExtra("receiver", new MyReceiver(new Handler()));
this.startService(intent);