onReceive方法没有被调用

时间:2014-04-27 06:59:44

标签: android intentservice android-intentservice

我尝试使用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节

我错过了什么?

修改

我有其他替代解决方案吗?我试图通过服务通知活动来更新数据。

1 个答案:

答案 0 :(得分:1)

我不确定原始代码无法正常工作的原因。但是,如果您想要应用程序本地广播,则可能需要使用LocalBroadcastManager而不是常规的跨应用程序广播。

在您的服务中使用此功能:

LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

以及您活动中的这些内容:

LocalBroadcastManager.getInstance(this).registerReceiver(receiver,
        new IntentFilter(NotifyService.NOTIFICATION));

LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);

如果这改变了什么,请告诉我。再一次,我不明白为什么你的原始代码不起作用,所以这更像是一个猜测。