重复报警管理器重新启动后 [英] Repeating Alarm Manager After reboot

查看:143
本文介绍了重复报警管理器重新启动后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建广播AlarmManager(重复)与通知message.i从拾荒者通过我的日历对象。如果我没有重新启动我的设备使用正常,然而,当我重新启动我的设备,你也知道我的压延机的对象为null。如何管理我的重启后,重复报警,我怎么能握住我的日历日程安排? 感谢您的想法。

 公共类MyReceiver扩展的BroadcastReceiver {
私有静态最终诠释PERIOD = 10000;
最终公共静态字符串ALARM_ID =AlarmId;
最终公共静态字符串NOTIFICATION_ID =NotificationId;


@覆盖
公共无效的onReceive(上下文ctxt,意图我){

}

静态无效scheduleAlarms(上下文ctxt,日历C){
    AlarmManager alarManager =(AlarmManager)ctxt
            .getSystemService(Context.ALARM_SERVICE);
//通知servise
    意图I =新的意图(ctxt,ScheduledService.class);
i.putExtra(ALARM_ID,1);
i.putExtra(NOTIFICATION_ID,1);

PendingIntent PI = PendingIntent.getService(ctxt,0,I,
            PendingIntent.FLAG_UPDATE_CURRENT);
alarManager.setRepeating(AlarmManager.RTC,c.getTimeInMillis(),周期,PI);
}
 

解决方案

您需要使用的BroadcastReceiver 键,将其设置为回应BOOT_COMPLETED 的消息。例如

填写您的BroadcastReceiver在清单

 <接收机器人:MyBootReceiverNAME =>
    <意向滤光器>
        <作用机器人:名称=android.intent.action.BOOT_COMPLETED/>
    &所述; /意图滤光器>
< /接收器>
 

在你的code处理消息

MyBootReceiver.java

 公共类MyBootReceiver扩展的BroadcastReceiver
{
    私有静态最后字符串变量=MyBootReceiver;

    公共无效的onReceive(上下文的背景下,意图意图){
        Log.d(TAG的onReceive);
        日历CAL = this.getMyCalendar();
        this.scheduleAlarms(背景下,CAL);
    }

    私人日历getMyCalendar(){
        //得到你的日历对象
    }

    私人无效scheduleAlarms(上下文ctxt,日历C){
        AlarmManager alarManager =(AlarmManager)ctxt.getSystemService(Context.ALARM_SERVICE);
        //通知servise
        意图I =新的意图(ctxt,ScheduledService.class);
        i.putExtra(ALARM_ID,1);
        i.putExtra(NOTIFICATION_ID,1);

        PendingIntent PI = PendingIntent.getService(ctxt,0,I,PendingIntent.FLAG_UPDATE_CURRENT);
        alarManager.setRepeating(AlarmManager.RTC,c.getTimeInMillis(),周期,PI);
    }
}
 

这将重置您的报警日程安排上的引导。

i want to create broadcast AlarmManager(repeating) with Notification message.i pass my calender object from Pickers. If i don't reboot my device it works normally. However, when i reboot my device,as you know my calander object will be null. How can i manage my repeating alarm after rebooting and how can i hold my Calendar schedules? Thanks for your ideas.

public class MyReceiver extends BroadcastReceiver {
private static final int PERIOD = 10000;
final public static String ALARM_ID = "AlarmId";
final public static String NOTIFICATION_ID = "NotificationId";


@Override
public void onReceive(Context ctxt, Intent i) {

}

static void scheduleAlarms(Context ctxt,Calendar c) {
    AlarmManager alarManager = (AlarmManager) ctxt
            .getSystemService(Context.ALARM_SERVICE);
//notification servise  
    Intent i = new Intent(ctxt, ScheduledService.class);
i.putExtra(ALARM_ID, 1);
i.putExtra(NOTIFICATION_ID, 1);

PendingIntent pi = PendingIntent.getService(ctxt, 0, i,
            PendingIntent.FLAG_UPDATE_CURRENT);
alarManager.setRepeating(AlarmManager.RTC,c.getTimeInMillis(),PERIOD, pi);
}

解决方案

You need to use a BroadcastReceiver and set it to respond to BOOT_COMPLETED messages. For example

Register your BroadcastReceiver in the manifest

<receiver android:name=".MyBootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Handle the message within your code

MyBootReceiver.java

public class MyBootReceiver extends BroadcastReceiver 
{
    private static final String TAG = "MyBootReceiver";

    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "onReceive");
        Calendar cal = this.getMyCalendar();
        this.scheduleAlarms(context, cal);
    }

    private Calendar getMyCalendar() {
        // get your calendar object
    }

    private void scheduleAlarms(Context ctxt, Calendar c) {
        AlarmManager alarManager = (AlarmManager) ctxt.getSystemService(Context.ALARM_SERVICE);
        //notification servise  
        Intent i = new Intent(ctxt, ScheduledService.class);
        i.putExtra(ALARM_ID, 1);
        i.putExtra(NOTIFICATION_ID, 1);

        PendingIntent pi = PendingIntent.getService(ctxt, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
        alarManager.setRepeating(AlarmManager.RTC,c.getTimeInMillis(),PERIOD, pi);
    }
}

This will reset your alarm schedule on boot.

这篇关于重复报警管理器重新启动后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆