从后台清除应用程序时,将丢弃AlarmManager

时间:2015-03-04 12:48:15

标签: android broadcastreceiver alarmmanager android-pendingintent android-broadcast

这就是我创建闹钟的方式。 当应用程序仍在后台运行时,会触发警报。 但是当它从最近的应用程序中清除时,警报就会被丢弃。我正在注册一个新的接收器并提供一个独特的动作来区分两个警报。我的代码中是否有任何错误。

        String filter_action = "myPackageName" + request_code_value +"_time";

        IntentFilter filter = new IntentFilter(filter_action);

        registerReceiver(new AlarmReciever(), filter);

        Intent intent = new Intent(filter_action);
        intent.putExtra(getString(R.string.get_current_intent_value), request_code_value);
        intent.putExtra(getString(R.string.alarmtext), alarm_title);
        intent.putExtra(getString(R.string.alarm_time), newAlarm_Choose_Alarm_Value.getText().toString());

        Calendar calNow = Calendar.getInstance();
        Calendar calSet = (Calendar) calNow.clone();


        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, request_code_value, intent, 0);


        calSet.setTimeInMillis(timeInMillis);

        if (calSet.compareTo(calNow) <= 0) {
            // Today Set time passed, count to tomorrow
            calSet.add(Calendar.DATE, 1);
        }

        alarmManager.set(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(), pendingIntent);

清单文件。

<receiver android:name="com.bigbangpartners.YoWakeUp.activities.AlarmReciever" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="AlarmManager_Start" />
        </intent-filter>
</receiver>

请帮帮我。 提前谢谢。

1 个答案:

答案 0 :(得分:5)

如果您在BroadcastReceiver中以编程方式注册和取消注册Activity,那么只要应用程序流程为此,以这种方式创建的BroadcastReceiver将保持存在活。因此,当您从最近的应用列表中删除您的应用时,此BroadcastReceiver实际上也会被销毁。

另一方面,清单中注册的BroadcastReceiver是Android应用程序的全局永久组件,无论应用程序进程是否存在,它都将永远存在。

如果您希望即使应用程序不在前台也可以激活警报,那么您需要在应用程序清单中注册BroadcastReceiver并指定警报操作。你不这样做,我相信这是你问题的根源。

你应该做什么:

1。在清单中定义BroadcastReceiver,如下所示:

<receiver android:name="com.bigbangpartners.YoWakeUp.activities.AlarmReciever" >        
</receiver>

2。删除应用代码中对registerReceiver()unRegisterReceiver()的所有来电,因为不需要。

3。定义闹钟Intent,如下所示:

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

其余代码保持不变。首先尝试一下,看看它是否有效。