android 设置每天重复通知,java - 如何在每天的不同时间在Android Studio中设置每日重复通知? - 堆栈内存溢出...

本文介绍了如何在Android应用中从数据库读取事件时间,为每个事件设置精确的警报,并根据设备版本调整唤醒策略。方法涉及使用AlarmManager API,适用于不同Android版本,以确保手机在指定时间从休眠状态唤醒。
摘要由CSDN通过智能技术生成

您可以为每个事件设置一个警报。 从数据库中读取所有事件时间,然后为这些事件设置单个警报。 而不是setRepeating使用此。 设置警报变体适用于不同的Android版本,以将手机从睡眠状态唤醒。

private void setAlarm(Long dateInMillis) {

AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

Intent alarmIntent = new Intent(this, AlarmReceiver.class);

PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

if (Build.VERSION.SDK_INT >= 23) {

am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, dateInMillis, pi);

} else if (Build.VERSION.SDK_INT >= 19) {

am.setExact(AlarmManager.RTC_WAKEUP, dateInMillis, pi);

} else {

am.set(AlarmManager.RTC_WAKEUP, dateInMillis, pi);

}

}

dateInMillis是您要为其设置警报的时间的Calender.getInstance().getTimeInMillis() 。 因此,我希望您在数据库中存储了很长的时间,这是使您的工作更轻松的价值

public ArrayList getAlarms() {

SQLiteDatabase db;

ArrayList result = new ArrayList();

String myPath = DATABASE_PATH + DATABASE_NAME;

db = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

selectQuery = "SELECT * FROM TABLE";

Cursor cursor = db.rawQuery(selectQuery, null);

if (cursor.moveToFirst()) {

result.add(cursor.getString(cursor.getColumnIndex("WhateverYourColumnIs")));

while (cursor.moveToNext()) {

result.add(cursor.getString(cursor.getColumnIndex("WhateverYourColumnIs")));

}

}

cursor.close();

db.close();

return result;

}

您可以将字符串转换为Long

DatabaseHelper db = new DatabaseHelper();

ArrayList alarms = db.getAlarms()

for(String alarm : alarms){

try{

setAlarm(Long.parseLong(alarm));

}catch(NumberFormatException nfe){

//Not a number

}

}

这样的东西

private Long calendarMillis(String date, String time){

Long result;

//Do A bunch of stuff to get the information to fill in below from what you bring in.

Calendar c = Calendar.getInstance();

c.set(Calendar.YEAR, year);

//...Calendar.HOUR, Calendar.MONTH, Calendar.DAY

c.set(Calendar.MINUTE, minute);

result = c.getTimeInMillis();

return result;

}

public class NotificationInformation{

Long alarmTime;

String name;

public void NotificationInformation(){

}

public void NotificationInformation(NotificationInformation ni){

this.name = ni.getName();

this.alarmTime = ni.getAlarmTime();

}

//getters and setters

public void setAlarmTime(Long alarmTime){

this.alarmTime = alarmTime;

}

public void setName(String name){

this.nime = nime;

}

public Long getAlarmTime(){

return alarmTime;

}

public String getName(){

return name;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值