如何将值发送到android中的报警管理器?

时间:2016-02-09 07:26:38

标签: android alarmmanager android-pendingintent android-calendar

在我的应用程序中,我需要将动态值发送给警报管理器。

当我向警报管理器发送静态值时它工作正常。请任何人帮助我。提前谢谢。

我的代码:   DatabaseHandler.java:

    public void add_mobilenotification(int year, int month,int date, int hour, int min ,int sec ){
            SQLiteDatabase db = this.getWritableDatabase();

            ContentValues values = new ContentValues();
            values.put(YEAR, year);
            values.put(MONTH, month);
            values.put(DATE, date);

            values.put(HOUR, hour );
            values.put(MIN, min);
            values.put(SEC, sec);
            db.insert(TABLE_MOBILENOTIFICATIONS, null, values);

         }

 public void set_datemonth(int month){
        SQLiteDatabase db = this.getReadableDatabase();
        String opQryString = "SELECT " + DATE + "," + MONTH + "," + YEAR + ",+ HOUR + ",+ MIN + ",+ SEC + " FROM " + TABLE_MOBILENOTIFICATIONS + " WHERE "  + MONTH + "= '" + month+ "'";
        Cursor getmonthdateType = db.rawQuery(opQryString, null);
        if (getmonthdateType.moveToFirst()) {
            dt = getmonthdateType.getInt(0);
            mnth= getmonthdateType.getInt(1);
         yr= getmonthdateType.getInt(2);
          hr= getmonthdateType.getInt(3);
          min = getmonthdateType.getInt(4);
     sec = getmonthdateType.getInt(5);


        }
    }

的活动:

 db = DatabaseHandler.getInstance(getApplicationContext());
         db.add_mobilenotification(2015,2,9,13,40,2);
         db.set_datemonth(9);
          private void initAlarm(){

                Intent myIntent = new Intent(SplashActivity.this, MyReceiver.class);
                PendingIntent  pendingIntent = PendingIntent.getBroadcast(SplashActivity.this, 0, myIntent,0);

                AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
                Calendar calendar = Calendar.getInstance();

                cal.set(Calendar.MONTH,db.mnth);
        cal.set(Calendar.YEAR,db.yr);
        cal.set(Calendar.DAY_OF_MONTH,db.dt);

        cal.set(Calendar.HOUR_OF_DAY,db.hr);
        cal.set(Calendar.MINUTE,db.min);
        cal.set(Calendar.SECOND,db.sec);



                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
            }

清单:

<service android:name=".activity.MyAlarmService"
            android:enabled="true" />

        <receiver android:name=".activity.MyReceiver"/>

2 个答案:

答案 0 :(得分:0)

将数据添加到intent。 intent.putExtra("key",data);,然后在BroadcastReceiver中检索它,如下所示:String data = intent.getStringExtra("key");

答案 1 :(得分:0)

我在github中的this存储库后面做了这种工作。主要在这个项目中,时间,日期,日期等数据在数据库中作为输入给出。我们维护一个模型类,并根据模型从数据库中获取数据。然后我们设置警报。为了设置闹钟,我们使用一个扩展BroadcastListener的AlarmHelper类。它在下面给出了

public class AlarmManagerHelper extends BroadcastReceiver {

public static final String ID = "id";
public static final String NAME = "name";
public static final String TIME_HOUR = "timeHour";
public static final String TIME_MINUTE = "timeMinute";
public static final String TONE = "alarmTone";

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

public static void setAlarms(Context context) {
    cancelAlarms(context);

    AlarmDBHelper dbHelper = new AlarmDBHelper(context);

    List<AlarmModel> alarms =  dbHelper.getAlarms();

    for (AlarmModel alarm : alarms) {
        if (alarm.isEnabled) {

            PendingIntent pIntent = createPendingIntent(context, alarm);

            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.HOUR_OF_DAY, alarm.timeHour);
            calendar.set(Calendar.MINUTE, alarm.timeMinute);
            calendar.set(Calendar.SECOND, 00);

            //Find next time to set
            final int nowDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
            final int nowHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
            final int nowMinute = Calendar.getInstance().get(Calendar.MINUTE);
            boolean alarmSet = false;

            //First check if it's later in the week
            for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; ++dayOfWeek) {
                if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek >= nowDay &&
                        !(dayOfWeek == nowDay && alarm.timeHour < nowHour) &&
                        !(dayOfWeek == nowDay && alarm.timeHour == nowHour && alarm.timeMinute <= nowMinute)) {
                    calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);

                    setAlarm(context, calendar, pIntent);
                    alarmSet = true;
                    break;
                }
            }

            //Else check if it's earlier in the week
            if (!alarmSet) {
                for (int dayOfWeek = Calendar.SUNDAY; dayOfWeek <= Calendar.SATURDAY; ++dayOfWeek) {
                    if (alarm.getRepeatingDay(dayOfWeek - 1) && dayOfWeek <= nowDay && alarm.repeatWeekly) {
                        calendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);
                        calendar.add(Calendar.WEEK_OF_YEAR, 1);

                        setAlarm(context, calendar, pIntent);
                        alarmSet = true;
                        break;
                    }
                }
            }
        }
    }
}

@SuppressLint("NewApi")
private static void setAlarm(Context context, Calendar calendar, PendingIntent pIntent) {
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
    } else {
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);
    }
}

public static void cancelAlarms(Context context) {
    AlarmDBHelper dbHelper = new AlarmDBHelper(context);

    List<AlarmModel> alarms =  dbHelper.getAlarms();

    if (alarms != null) {
        for (AlarmModel alarm : alarms) {
            if (alarm.isEnabled) {
                PendingIntent pIntent = createPendingIntent(context, alarm);

                AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                alarmManager.cancel(pIntent);
            }
        }
    }
}

private static PendingIntent createPendingIntent(Context context, AlarmModel model) {
    Intent intent = new Intent(context, AlarmService.class);
    intent.putExtra(ID, model.id);
    intent.putExtra(NAME, model.name);
    intent.putExtra(TIME_HOUR, model.timeHour);
    intent.putExtra(TIME_MINUTE, model.timeMinute);
    intent.putExtra(TONE, model.alarmTone.toString());

    return PendingIntent.getService(context, (int) model.id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
}

但我会建议你通过存储库以更好的方式理解整个事情