【发布时间】:2014-07-14 13:32:39
【问题描述】:
我正在尝试使用 Alarmmanager 和 BroadcastReciever 设置每日重复警报,但警报没有正确触发。
我在第一次安装应用程序时使用下面的代码设置警报:
checkFirstTime = getSharedPreferences("firstRun", 0);
db = new DatabaseHandler(this);
if (checkFirstTime.getBoolean("my_first_time", true))
{
db = new DatabaseHandler(this);
db.InitializeAll();
checkFirstTime.edit().putBoolean("my_first_time", false).commit();
//To set alarm manager
setAlarmManager();
Toast.makeText(context, "alarm set", Toast.LENGTH_LONG).show();
}
功能设置报警:
private void setAlarmManager()
{
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 12);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.AM_PM, 0);
AlarmManager alarmMgr;
alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent("com.example.testaclrtn");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar now = Calendar.getInstance();
long calendarTime= 0;
if(calendar.getTimeInMillis() <= now.getTimeInMillis())
calendarTime = calendar.getTimeInMillis() + (AlarmManager.INTERVAL_DAY+1);
else
calendarTime = calendar.getTimeInMillis() ;
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendarTime,
AlarmManager.INTERVAL_DAY, pendingIntent);
}
BroadcastReciever 包含以下代码:
public class AlarmReceiver extends BroadcastReceiver {
SharedPreferences storeDay;
DatabaseHandler db;
@Override
public void onReceive(Context context, Intent intent)
{
Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
db = new DatabaseHandler(context);
whenNextDay();
Message msgToActivity = new Message();
msgToActivity.what = 5;
}
public void whenNextDay()
{
int count = db.getPickCount(2);
int target = db.getPickTarget(2);
long time = db.getTimeCount(2);
db.updatePickCount(3, count);
db.updatePickTarget(3, target);
db.updateTimeCount(3, time);
count = db.getPickCount(1);
target = db.getPickTarget(1);
time = db.getTimeCount(1);
db.updatePickCount(2, count);
db.updatePickTarget(2, target);
db.updateTimeCount(2, time);
db.updatePickCount(1, 0);
db.updateTimeCount(1, 0);
db.close();
}
请帮助我找出我使用的逻辑或代码有什么问题。谢谢
【问题讨论】:
-
您是否在 AndroidManifest.xml 中注册了您的
BroadcastReceiver? -
是的,我有,并且警报会触发一次,但不会重复。
标签: android alarmmanager repeatingalarm