private void startAlarm() {
AlarmManager alarmMgr;
PendingIntent alarmIntent;
alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 52);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
1000 * 60 * 20, alarmIntent);
}
startAlarm()方法位于MainActivity类中。
以下代码应该在23:52和之后的每20分钟显示一个toast(在AlarmReceiver类的onReceive()方法中声明)
AlarmReceiver扩展了BroadcastReceiver。
代码编译没有错误但由于某种原因它没有显示toast。
注意:代码在ELAPSED_REALTIME_WAKEUP中运行良好。我只有RTC_WAKEUP有问题。所以其他一切都必须是正确的。 startAlarm()方法内部有问题。
答案 0 :(得分:1)
我已尝试过您的代码,如下所示进行了一些修改。
private void startAlarm() {
AlarmManager alarmMgr;
PendingIntent alarmIntent;
alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 2);
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
1000 * 20, alarmIntent);
}
此代码适用于AlarmManager.RTC_WAKEUP。如果它不适合您,请在安装后重启设备。重启完成后,启动您的应用程序。然后它应该发出警报,并且每20秒间隔警报反复发射。
您还可以检查RTC_WAKEUP和ELAPSED_REALTIME_WAKEUP之间的区别。从android文档中,elapsedRealtime表示,返回自启动以来的毫秒数,包括睡眠时间和RTC表示的时间,System.currentTimeMillis()中的时间(以UTC为挂钟时间)。
答案 1 :(得分:0)
看起来你需要为意图设置一个动作:
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
intent.setAction("YourPackageName.YourAction");
alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
在清单中:
<receiver android:name=".AlarmReciever">
<intent-filter>
<action android:name="YourPackageName.YourAction" />
</intent-filter>
</receiver>
这应该可以解决问题。您必须对广播接收器使用它的意图采取独特的行动。