重启后不会触发警报

时间:2013-11-19 07:16:36

标签: android alarmmanager reboot

我有一个警报,每隔15分钟重置一次数据连接。问题是,一旦手机重新启动,应用程序就会被杀死,并且警报(服务)不再触发。 (这不是重复,关于SO的其他类似问题不能解决我的问题。)

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <receiver
        android:name="com.sang.mobiledata.ResetBroadcastReceiver"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.sang.mobiledata.IntentAction.RECEIVE_RESETCONN_UPDATE" />
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>

    </receiver>

广播接收器:

public void onReceive(Context context, Intent intent) {
    // if(CONN_ACTION.equals(intent.getAction())) {
    if (intent.getAction().equalsIgnoreCase(
            "com.sang.mobiledata.IntentAction.RECEIVE_RESETCONN_UPDATE")) {
        MainActivity objMain = new MainActivity();

        objNetwork.setMobileDataEnabled(context, false);
        objNetwork.setMobileDataEnabled(context, true);

    }

    if (intent.getAction().equalsIgnoreCase(
            "android.intent.action.BOOT_COMPLETED")) {

            // code to restart/resume/retain alarm

火警警报代码(在onClick上):

Intent myIntent = new Intent(
                    "com.sang.mobiledata.IntentAction.RECEIVE_RESETCONN_UPDATE");
            myIntent.putExtra("FLAG_KEY", false);
            PendingIntent pi = PendingIntent.getBroadcast(this, 0, myIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

            AlarmManager alarmManager = (AlarmManager) this
                    .getSystemService(Context.ALARM_SERVICE);

            calendar.setTimeInMillis(System.currentTimeMillis());

            calendar.add(Calendar.SECOND, 10);
            long interval = intHrs * 3600000 + intMins * 60000;
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
                    calendar.getTimeInMillis(), interval, pi);
            long mins = interval / 60000;
            Toast.makeText(
                    MainActivity.this,
                    "Data Connection will be reset every " + mins
                            + " minute(s).", Toast.LENGTH_SHORT).show();
            }

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

阅读AlarmManager文档,其中写着AlarmManager在重启后不会保留警报。

根据 Android开发者

  

...。设备处于睡眠状态时会保留已注册的警报(如果设备在此期间关闭,则可以选择将设备唤醒),但如果设备关闭并重新启动,则会清除。

关于BOOT_COMPLETED,他们写道:

  

...在系统完成启动后播放一次。它可用于执行特定于应用程序的初始化,例如安装警报。您必须持有RECEIVE_BOOT_COMPLETED权限才能接收此广播。

关于许可,您已经注册了。那么可能发生的是,服务 BOOT_COMPLETED 正在本地与应用程序一起使用。移动设备的reboot系统活动,其未被重写以完成对正在保存的警报的重新注册。但我不确定。因此,当执行BOOT_COMPLETED时,您需要执行某些操作。

阅读Automatically starting Services in Android after booting,这可能对您有帮助。

我做的是,我使用database注册了所有闹钟并形成SQLite;在restart,我用来重置所有警报。那对我有用。如果你想继续我的流程,

为警报创建数据库,并将其保存在那里。以这样的方式编写应用程序:当电话重新启动时,AlarmManager将重置所有警报。这是它的工作原理。


再次Automatically starting Services in Android After booting。写道:

  

另请注意,从Android 3.0开始,用户需要在应用程序收到android.intent.action.BOOT_COMPLETED事件之前至少启动一次应用程序。