我尝试使用IntentService
将广播从服务发送到活动,因为我使用了以下代码:
public class NotifyService extends IntentService {
public NotifyService() {
super("NotifyService");
}
// will be called asynchronously by Android
@Override
protected void onHandleIntent(Intent intent) {
Log.d("onHandleIntent", "start service");
publishResults();
}
private void publishResults() {
result = Activity.RESULT_OK;
Intent intent = new Intent(NOTIFICATION);
intent.putExtra(RESULT, result);
sendBroadcast(intent);
}
}
然后我在一个Activity类中定义我的Receiver,如:
public BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("TAG", "receiver");
Bundle bundle = intent.getExtras();
if (bundle != null) {
int resultCode = bundle.getInt(NotifyService.RESULT);
if (resultCode == RESULT_OK) {
Toast.makeText(Home.this, "after service work.", Toast.LENGTH_LONG)
.show();
}
}
stopService(new Intent(Home.this,NotifyService.class));
}
};
我在registerReceiver
中使用了onResume
,在unregisterReceiver
方法中使用了onPause
registerReceiver(receiver, new IntentFilter(NotifyService.NOTIFICATION));
但onReceive
方法未被调用,
我使用了This Site
的第7节我错过了什么?
修改
我有其他替代解决方案吗?我试图通过服务通知活动来更新数据。
答案 0 :(得分:1)
我不确定原始代码无法正常工作的原因。但是,如果您想要应用程序本地广播,则可能需要使用LocalBroadcastManager而不是常规的跨应用程序广播。
在您的服务中使用此功能:
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
以及您活动中的这些内容:
LocalBroadcastManager.getInstance(this).registerReceiver(receiver,
new IntentFilter(NotifyService.NOTIFICATION));
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
如果这改变了什么,请告诉我。再一次,我不明白为什么你的原始代码不起作用,所以这更像是一个猜测。