如何在android中使用警报管理器获取工作日的重复警报?

时间:2011-09-09 05:29:47

标签: android

您好我是android的新手我正在开发警报应用程序,我需要在用户选择的不同日期重复调用警报。如果我将闹钟时间设置为上午10点并重复选项作为星期日,星期一,星期六,闹钟将在每个星期日,星期一,星期六调用。

这里我使用代码来调用警报

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
                Intent intent = new Intent(Alarm.this, OneShotAlarm.class);  //here i am calling broad \cast receiver to invoke alarm

                 PendingIntent sender = PendingIntent.getBroadcast(Alarm.this, requestCode, intent, 0);
                 Calendar calendar = Calendar.getInstance();
calendar.set(Calender.HOUR_OF_DAY,10); 
                am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);

通过使用此代码,我在上午10点调用当天。但是我的gole需要在上午10点调用选定日期的警报。

我还有另外一个问题请帮助。当我试图通过时间时,将调用当前时间的警报。我怎么能给出过去的时间。我的意思是当我在11AP时,我需要给上午9点。

如果有任何办法,请建议我。 提前谢谢。

3 个答案:

答案 0 :(得分:7)

请在您的广播接收器类中写下以下代码,它将解决您的问题。

public class MyBroadcastReceiver extends BroadcastReceiver {
    DBAdapter mDba;
    SQLiteDatabase mDb;
    Ringtone rt;
    MediaPlayer mp;
    AlertDialog.Builder alertbox;
    Context ctx;

    @Override
    public void onReceive(Context context, Intent intent) {

        DBHelper mDbh = new DBHelper(context, null, null, 1);
        mDb = mDbh.getWritableDatabase();
        mDb.setLockingEnabled(true);
        mDba = new DBAdapter(context);
        mDba.open();
        Cursor cr = mDb.query("mReminderEntry", null, null, null, null,
                null, null);
        if (cr.equals(null)) {
            System.out.println("No Data Found");
        } else {
            Date d = new Date();
            System.out.println("Current Hour is:- " + d.getHours());
            System.out.println("Current Minute is:- " + d.getMinutes());
            Calendar calendar = Calendar.getInstance();
            int day = calendar.get(Calendar.DAY_OF_WEEK);
            String today = null;
            if (day == 2) {
                today = "Monday";
            } else if (day == 3) {
                today = "Tuesday";
            } else if (day == 4) {
                today = "Wednesday";
            } else if (day == 5) {
                today = "Thursday";
            } else if (day == 6) {
                today = "Friday";
            } else if (day == 7) {
                today = "Saturday";
            } else if (day == 1) {
                today = "Sunday";
            }
            System.out.println("Today is:- " + today);

            int system_hour = d.getHours();
            int system_minute = d.getMinutes();
            cr.moveToFirst();
            for (int i = 0; i < cr.getCount(); i++) {
                if (cr.getString(3).equals(system_hour + ":" + system_minute)
                        && cr.getString(1).equals("Daily")) {

                    System.out.println("Matched");
                    Intent scheduledIntent = new Intent(context, MyScheduledActivity.class);
                    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(scheduledIntent);

                    break;

                } else if (cr.getString(3).equals(
                        system_hour + ":" + system_minute)
                        && cr.getString(1).equals(today)) {

                    Intent scheduledIntent = new Intent(context, MyScheduledActivity.class);
                    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    context.startActivity(scheduledIntent);

                    System.out.println("Matched");

                    break;
                } else {
                    System.out.println("No Matching");
                }
                cr.moveToNext();
            }
        }
        cr.close();
        mDba.close();
    }
}

如果你对此有任何疑问,请告诉我。

答案 1 :(得分:1)

Dipak Keshariya是对的,你需要有一些逻辑......一个逻辑可能是:

  • 使用数据库存储警报。

  • 提供从数据库获取最新时间的服务。

  • 上注册闹钟
  • 触发时,检查警报是否重复

  • 如果是,则更新db中的闹钟时间。即现在警报将在下一个重复日编辑。

  • 重启服务

现在,如果你的逻辑是正确的,那么你不需要回答你的第二个问题,因为你不需要它。

答案 2 :(得分:-2)

您可以采用以下方式实施重复警报:

1:首先创建数据库并存储警报。

2:而不是使用服务,您可以使用时间刻录接收器(广播接收器),并在接收时间刻度接收器的方法中,您可以检查当前时间和当前日期,并将其与报警日期和时间匹配数据库中。

3:如果日期和时间都匹配,则可以触发警报。