我有一组警报,我需要在重启后保留.我尝试过使用启动接收器,但它们不会重新启动.我不确定我是否理解启动接收器以及如何重新启动所有警报.我已经有一个接收器用于我的通知,但不知道我是否可以使用相同的接收器或我是否需要一个新接收器?
谁能指点我任何好的教程或帮助我?
干杯
代码:
DatabaseHandler db = new DatabaseHandler(this);
List<UAlarm> alarms = db.getAllAlarms();
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
for (UAlarm ua : alarms) {
String programme = ua.getTitle();
String startTime = ua.getStart();
String endTime = ua.getEnd();
String nowPlaying = ua.getChannel();
db.addAlarm(new UAlarm(programme, startTime, endTime, nowPlaying, ""));
final UAlarm ut = new UAlarm();
ut.setTitle(programme);
ut.setStart(startTime);
ut.setEnd(endTime);
ut.setChannel(nowPlaying);
ut.setId(db.getLastEntered());
String [] bla = startTime.split(":");
int hour = Integer.parseInt(bla[0].trim());
int minute = Integer.parseInt(bla[1].trim());
minute -= 2;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, …Run Code Online (Sandbox Code Playgroud) 编辑:根据CommonsWare的答案澄清问题
我们通过AlarmManager安排一个警报,每60秒触发一次.当我们的应用程序被杀死时,我们的警报似乎不再执行.即使应用程序被手动或系统杀死,有没有办法使这些警报持续存在?
这对我们来说是一个问题,因为我们有一个显示时间的小部件应用程序.这意味着我们需要每分钟更新一次.为了解决AppWidgetProvider的onUpdate方法的30分钟更新限制,我们使用AlarmManager.它通常运行良好,但有些用户报告时间不同步.在与其中几个人交谈之后,我怀疑我们的应用程序是通过任务杀手应用程序手动杀死的,或者Android本身正在杀死我们的应用程序.
对根问题的任何其他替代解决方案(在窗口小部件中保持时间同步)也是受欢迎的.
以下是我们执行的用于安排警报的代码:
Intent intent = new Intent(UPDATE_TIME);
PendingIntent pIntent = PendingIntent.getBroadcast(ctx,
0 /* no requestCode */, intent, PendingIntent.FLAG_UPDATE_CURRENT );
// get alarm params
Date d = new Date();
long timeTilMinuteChange = 60*1000-d.getSeconds()*1000;
long startTime = System.currentTimeMillis() + + timeTilMinuteChange;
AlarmManager am = (AlarmManager) ctx.getSystemService(Context.
am.cancel(pIntent);
am.set(AlarmManager.RTC, System.currentTimeMillis(), pIntent);
am.setRepeating(AlarmManager.RTC, startTime, 60000, pIntent);
Run Code Online (Sandbox Code Playgroud) 安排警报的代码.
PendingIntent sender = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, sender);
Run Code Online (Sandbox Code Playgroud)
它的工作正常,但当我在任务杀手中杀死我的应用程序时,我丢失了我的预定警报.如何解决这个问题呢?
我创建了一个依赖关系来显示通知
在My DeviceDetails_Droid.cs中,我将设置闹钟设置为30秒
当应用程序处于活动状态时,本地通知功能可以正常工作,但是当我杀死应用程序(关闭应用程序)时,警报接收器未被调用.
public void ShowNotification(string message, string title)
{
Intent alarmIntent = new Intent(Forms.Context, typeof(AlarmReceiver));
alarmIntent.PutExtra ("message", message);
alarmIntent.PutExtra ("title", title);
PendingIntent pendingIntent = PendingIntent.GetBroadcast(Forms.Context, 0, alarmIntent, PendingIntentFlags.UpdateCurrent);
AlarmManager alarmManager = (AlarmManager) Forms.Context.GetSystemService(Context.AlarmService);
//TODO: For demo set after 5 seconds.
alarmManager.Set(AlarmType.RtcWakeup, DateTime.Now.Millisecond + 30000, pendingIntent);
}
Run Code Online (Sandbox Code Playgroud)
[BroadcastReceiver]
public class AlarmReceiver : BroadcastReceiver
{
public override void OnReceive (Context context, Intent intent)
{
var message = intent.GetStringExtra ("message");
var title = intent.GetStringExtra ("title");
var notIntent = new …Run Code Online (Sandbox Code Playgroud)