每日报警代码 说明

Dialy Alarm code Explanation

我是android的新手,我想在上午11点拨号通知我。我在网上找到了一些代码,但不知道其中的某些部分。下面是代码

public void onClick(View arg0) {
// TODO Auto-generated method stub

Intent myIntent = new Intent(AndroidAlarmService.this, MyAlarmService.class);
pendingIntent = PendingIntent.getService(AndroidAlarmService.this, 0, myIntent, 0);

        AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());  does
        calendar.add(Calendar.SECOND, 10); 

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 5*1000, pendingIntent);

Toast.makeText(AndroidAlarmService.this, "Start Alarm", Toast.LENGTH_LONG).show();
}});

谁能解释一下这两行的作用

 calendar.setTimeInMillis(System.currentTimeMillis());  does
 calendar.add(Calendar.SECOND, 10); 

还要帮我设置闹钟,例如在上午 11 点同时通知我

System.currentTimeMillis()- 从设备获取当前时间。

calendar.setTimeInMillis()- 设置当前时间。

calendar.add(Calendar.SECOND, 10) - 在当前时间基础上增加十秒。

总的来说,您正在获取设备的当前时间并在其中添加十秒。

在需要的地方调用这个函数:

private void setDailyNotification(int ID, int hh, int mm, int ss) {
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    Intent alarmIntent = new Intent(Dashboard.this, MyDailyReceiver.class);
    alarmIntent.putExtra("ID", ID);
    Log.d("setDailyNotification", "ID:" + ID);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
            Dashboard.this, ID, alarmIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    mEverydayPendingIntent = pendingIntent;

    Calendar calendar = Calendar.getInstance();
    Calendar now = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, hh);
    calendar.set(Calendar.MINUTE, mm);
    calendar.set(Calendar.SECOND, ss);

    // check whether the time is earlier than current time. If so, set it to
    // tomorrow. Otherwise, all alarms for earlier time will fire

    if (calendar.before(now)) {
        calendar.add(Calendar.DATE, 1);
    }
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
            mEverydayPendingIntent);
    Log.d("setRepeated", "ID:" + ID);

}

广播接收者:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
                context);
        mBuilder.setContentTitle("Daily Summery");
        mBuilder.setContentText("Today's Transaction");
        mBuilder.setSmallIcon(R.drawable.app_icon);
        Log.d("tag1234", "In if" + daily_Reminder);
        NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
        mBuilder.setStyle(inboxStyle);
        mNotificationMa = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationMa.notify(11, mBuilder.build());

像这样调用函数:

setDailyNotification(11, 11,00, 00);

你可以试试这个对我有用

 int interval = 1000 * 60 * 1;
// 1 for minutes ,you can pass 60*24

//And set alarm manager like this

 Intent alarmIntent = new Intent(AlaramManagerActivity.this, NotificationReceiver.class);
        PendingIntent  pendingIntent = PendingIntent.getBroadcast(AlaramManagerActivity.this, RQS_1, alarmIntent, 0);
        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);


    manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),interval, pendingIntent);
  Intent myIntent = new Intent(activity.this, AlarmReceiver.class);

  PendingIntent pendingIntent = PendingIntent.getBroadcast(Splash.this, 0,   myIntent, 0);

  AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  Calendar firingCal= Calendar.getInstance();
  Calendar currentCal = Calendar.getInstance();
  firingCal.set(Calendar.HOUR,11); // At the hour you wanna fire
  firingCal.set(Calendar.MINUTE, 0); // Particular minute
  firingCal.set(Calendar.SECOND, 0); // particular second
  long intendedTime = firingCal.getTimeInMillis();
  long currentTime = currentCal.getTimeInMillis();
  if(intendedTime >= currentTime){ 
// you can add buffer time too here to ignore some small differences in        milliseconds
// set from today
 alarmManager.setRepeating(AlarmManager.RTC, intendedTime,        AlarmManager.INTERVAL_DAY, pendingIntent);
  } 
 else{
 // set from next day
 // you might consider using calendar.add() for adding one day to the current day
 firingCal.add(Calendar.DAY_OF_MONTH, 1);
 intendedTime = firingCal.getTimeInMillis();
 alarmManager.setRepeating(AlarmManager.RTC, intendedTime,    AlarmManager.INTERVAL_DAY, pendingIntent);}