调度多个非重复非固定区间事件

时间:2013-06-29 05:23:41

标签: android alarmmanager

您好我正在尝试创建一个简单的程序来安排在点击按钮后一段时间后触发事件。

对于我下面的代码,我可以一次性收到所有收到的事件,而不是以表格间隔。

代码如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    findViewById(R.id.the_button).setOnClickListener(this);
}

private void setup() {
    br = new BroadcastReceiver() {
        @Override
        public void onReceive(Context c, Intent i) {
            Date d = new Date();
            CharSequence s  = DateFormat.format("mm:ss ", d.getTime());
            Log.i("trigger"," " + s);
        }
    };
    registerReceiver(br, new IntentFilter("com.text.timer") );
    pi = PendingIntent.getBroadcast( this, 0, new Intent("com.text.timer"), 0 );
    am = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
}

@Override
public void onClick(View v) {
    setup();
    am.set( AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + TWENTY_SECONDS, pi );
    Date d = new Date();
    CharSequence s  = DateFormat.format("mm:ss ", d.getTime());
    Log.i("clicked"," " + s);
    count++;
}

@Override
protected void onDestroy() {
    am.cancel(pi);
    unregisterReceiver(br);
    super.onDestroy();
}

我的Logcat测试结果

06-29 05:04:05.501: I/clicked(1849):  04:05 
06-29 05:04:06.561: I/clicked(1849):  04:06 
06-29 05:04:07.551: I/clicked(1849):  04:07 
06-29 05:04:09.621: I/trigger(1849):  04:09 
06-29 05:04:09.651: I/trigger(1849):  04:09 
06-29 05:04:09.701: I/trigger(1849):  04:09 
06-29 05:04:09.741: I/trigger(1849):  04:09 
06-29 05:04:09.781: I/trigger(1849):  04:09 

2 个答案:

答案 0 :(得分:0)

This是一个很好的啧啧......但不确定这个问题。但是,我发现链接很有用。

答案 1 :(得分:0)

一些事情:

- 每次点击都不会注册接收者。做一次(例如你在onCreate上)。

- 为了让您在同一个广播上获得不同的onReceive调用,您需要为每个待处理的意图添加一个请求代码。你可以使用“计数”。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    am = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));

    br = new BroadcastReceiver() {
        @Override
        public void onReceive(Context c, Intent i) {
            Date d = new Date();
            CharSequence s = DateFormat.format("mm:ss ", d.getTime());
            Log.i("trigger", " " + s);
        }
    };

    registerReceiver(br, new IntentFilter("com.text.timer"));

    findViewById(R.id.the_button).setOnClickListener(this);
}

@Override
public void onClick(View v) {
    pi = PendingIntent.getBroadcast(this, count, new Intent(
            "com.text.timer"), 0);
    am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + TWENTY_SECONDS, pi);
    Date d = new Date();
    CharSequence s = DateFormat.format("mm:ss ", d.getTime());
    Log.i("clicked", " " + s);
    count++;
}

@Override
protected void onDestroy() {
    am.cancel(pi);
    unregisterReceiver(br);
    super.onDestroy();
}