Alarm Manager不执行广播类

时间:2014-07-17 06:15:52

标签: java android

我正在尝试警报并撞墙。我不认为我的警报设置正确,因为在警报响起后我从未得到确认。以下是我如何呼叫闹钟管理器:

long alarmtime=new GregorianCalendar().getTimeInMillis()+10*1000;//run after 10 seconds
Intent i = new Intent(this, AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getService(this, 0, i, 0);
        AlarmManager alarmman = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmman.cancel(pi); // cancel any existing alarms

        alarmman.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                alarmtime, 10 * 1000, pi);//run every 10 seconds

这是我的AlarmReceiver.java:

public class AlarmReceiver extends BroadcastReceiver {
     @Override
     public void onReceive(Context context, Intent intent) {
         Toast.makeText(context, "TEST",    Toast.LENGTH_LONG).show();
     }

}

然而,测试文本没有出现,我无法弄清楚原因。

2 个答案:

答案 0 :(得分:0)

由于您使用的是AlarmManager.ELAPSED_REALTIME_WAKEUP参数,因此您的初始闹钟时间应基于设备的实际已用时间:

long alarmtime = SystemClock.elapsedRealtime() + 10 * 1000;
alarmman.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, alarmtime, 10 * 1000, pi);

(见this link)。

对于BroadcastReceiver,它可能是PendingIntent.getBroadcast()而不是PendingIntent.getService()。您还要取消闹钟,只需像这样更新PendingIntent并尝试不取消:

PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

彻底阅读documentation以获取更多信息。

答案 1 :(得分:0)

确保通过执行System.out.println("TEST");而不是Toast来调用BroadcastReceiver。如果你能在logcat中看到它,那么问题可能是你需要在UI线程中运行Toast。