我应该在哪里触发警报管理器?

时间:2019-04-26 02:04:42

标签: java android alarmmanager

我想每天3点检查一些共享的首选项数据。我有三个不同的班级;

第一个:该类包含我的主要任务(以检查sharedpref。)。

第二个:一个广播接收器,可在设备重启时重新设置我的闹钟

第三名:我的主要活动课程

有两个问题;

如果我通过主Activity的onCreate方法触发了警报,则我的警报将正常运行,直到重新启动应用程序为止。每当我重新启动应用程序时,都会立即触发我的警报(它不会等待警报时间)。

第二,假设用户重新启动电话,并且我的广播接收器在重新启动后运行,然后再次设置警报。如果用户启动该应用程序将会怎样? (因为已经设置了闹钟)

这是我的密码;

  1. 我的主要任务():
Log.e("Main Task:","Do someting");
  1. 广播接收器
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 3);
calendar.set(Calendar.MINUTE, 0);

long delay = 24*60*60*1000;

AlarmManager alarmMgr =(AlarmManager) context.getSystemService (Context.ALARM_SERVICE);

Intent alarmIntent = new Intent(context, myMainTask.class);


PendingIntent pendingIntent = PendingIntent.getBroadcast(context,145,alarmIntent,PendingIntent.FLAG_UPDATE_CURRENT);

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),  delay, pendingIntent);

Toast.makeText(context,"Ahanda Kuruldum",Toast.LENGTH_LONG).show();

Log.e("ZB-DeviceBootReceiver:","just now alarm_up");

}
  1. 从onCreate(主要活动)触发警报的方法
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 3);
calendar.set(Calendar.MINUTE, 0);

long delay = 24*60*60*1000;

alarmMgr =(AlarmManager) getApplicationContext().getSystemService (Context.ALARM_SERVICE);

Intent intent = new Intent(getApplicationContext(), myMainTask.class);

PendingIntent pendingIntent = PendingIntent.getBroadcast (getApplicationContext(),1453, intent,PendingIntent.FLAG_UPDATE_CURRENT);

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),  delay, pendingIntent);

谢谢。

0 个答案:

没有答案