在我的应用程序中,我需要将动态值发送给警报管理器。
当我向警报管理器发送静态值时它工作正常。请任何人帮助我。提前谢谢。
我的代码: 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"/>
答案 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);
}
}
但我会建议你通过存储库以更好的方式理解整个事情