服务 - 活动和服务之间的广播

时间:2014-12-12 07:37:23

标签: android

我知道Stackoverflow上有很多关于这个主题的帖子,我已经阅读了每一个,但我仍然很困惑,非常抱歉,但我觉得我应该发布这个。

当应用程序运行时,接收器没有真正发生任何事情,好像他们没有收到任何东西

我的服务:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {

    int timerValue = pv.getTimerValues();
    aCounter = new CountDownTimer((timerValue), 1000) { // set to
                                                                    // timerValue
                                                                    // later
        public void onTick(long millisUntilFinished) {
            int minutes, seconds;   
            String sSeconds, sMinutes, toSend;
            seconds = (int) (millisUntilFinished / 1000) % 60;
                minutes = (int) ((millisUntilFinished / (1000 * 60)) % 60);
            sSeconds = Integer.toString(seconds);
            sMinutes = Integer.toString(minutes);
            toSend = (sMinutes + ":" + sSeconds);
            sendMessage(toSend);
            countDownCheck();
        }

        public void onFinish() {
            MediaPlayer dingeffect = MediaPlayer.create(
                    getApplicationContext(), R.raw.timerfinished);
            // mPlayer0.stop();
            try {
                dingeffect.prepare();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            dingeffect.start();
        //  Intent intent2 = new Intent(ServiceTest.this, Meditate.class);
            //startActivity(intent2);
            sendMessage("finished");
        }
    };
    aCounter.start();
    return START_NOT_STICKY;
}

@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

private void sendMessage(String send) {
    Intent intent1 = new Intent("countdowntimer");
    // You can also include some extra data.
    intent1.putExtra("message1", send);
    sendBroadcast(intent1);
}

我的接收活动: 在onCreate里面:

registerReceiver(mMessageReceiver1, new IntentFilter("countdowntimer"));
final Intent countDownService = new Intent(Meditate2.this,
            ServiceTest.class);

startService(countDownService);

和我的广播接收者在同一个活动中

    private BroadcastReceiver mMessageReceiver1 = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        String message = intent.getStringExtra("message1");
            setTimer(message);

    }
};

在清单中,我已经宣布了服务:

 <service android:name=".ServiceTest"></service>

奇怪的是,它在我修复了其他东西后停止工作,所以我真的不知道为什么它不是。求救!

2 个答案:

答案 0 :(得分:0)

您的广播接收器应该知道要听取什么意图。 使用intentFilter注册您的接收器,这样可以听取您的倒计时器意图:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("countdowntimer");
activity.registerReceiver(this, intentFilter);

答案 1 :(得分:0)

我会告诉你代码和我的(工作)代码有什么不同。 在onCreate上的活动:

LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver1, new IntentFilter("countdowntimer"));

在onDestroy活动中:

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

在sendMessage中:

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

我不知道这是否会产生很大的不同,但我使用了LocalBroadcastManager.getInstance