我正在尝试警报并撞墙。我不认为我的警报设置正确,因为在警报响起后我从未得到确认。以下是我如何呼叫闹钟管理器:
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();
}
}
然而,测试文本没有出现,我无法弄清楚原因。
答案 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。