如何与AlarmManager一起启动通知?

时间:2012-07-06 02:52:41

标签: android alarmmanager android-notifications reminders

我想知道如何发布通知。创建通知不是我要求的,而是一种在后台启动它的方式,因此它不引人注目,用户可以做他们正在做的任何事情。它用于日历,提醒确切。同样重要的是要注意我使用AlarmManager

  1. 我应该使用什么方法在后台运行它。 BroadCastRecieverService

  2. 我发现的研究也提出了AlarmManager的问题。当应用程序被杀或手机关闭时,警报也是。我应该使用哪种其他方法来确保通知可以显示该事件提醒?

  3. 如果需要任何其他信息,请询问,我会这样做。提前谢谢。

3 个答案:

答案 0 :(得分:3)

创建广播接收者或intentservice。然后...

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


Date date = new Date(); //set this to some specific time
or Calendar calendar = Calendar.getInstance();

//set either of these to the correct date and time. 

then 
Intent intent = new Intent();
//set this to intent to your IntentService or BroadcastReceiver
//then...
PendingIntent alarmSender = PendingIntent.getService(context, requestCode, intent,
                            PendingIntent.FLAG_CANCEL_CURRENT);
//or use PendingIntent.getBroadcast if you're gonna use a broadcast

                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), mAlarmSender); // date.getTime to get millis if using Date directly. 

如果您希望这些闹钟即使在重新启动手机时也能正常工作,请添加:

        <action android:name="android.intent.action.BOOT_COMPLETED"/>

作为清单中Receiver的intentfilter,并在onReceive中重新创建警报。

修改

当您在应用程序中创建BroadcastReceiver时,它允许完全听起来像:在系统中接收广播。例如,您可能会像以下那样使用BroadcastReceiver:

public class MyAwesomeBroadcastReceiver extends BroadcastReceiver {

//since BroadcastReceiver is an abstract class, you must override the following:

    public void onReceive(Context context, Intent intent) {
       //this method gets called when this class receives a broadcast
    }
}

要明确地向此类发送广播,您可以在清单中定义接收器,如下所示:

<receiver android:name="com.foo.bar.MyAwesomeBroadcastReceiver" android:enabled="true" android:exported="false">
            <intent-filter>

                <action android:name="SOME_AWESOME_TRIGGER_WORD"/>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>




            </intent-filter>
        </receiver>

在清单中使用此功能可以获得两件事:您可以随时通过

向您的接收器明确发送广播
Intent i = new Intent("SOME_AWESOME_TRIGGER_WORD");
                sendBroadcast(intent);

另外,既然你已经告诉android你想要收到系统广播的BOOT_COMPLETED动作,你的接收器也会在发生这种情况时被调用。

答案 1 :(得分:2)

使用AlarmManager是最佳做法。

答案 2 :(得分:1)

以下是您可以做的事情:

  1. 通过您的Service待审意图启动AlarmManager's,并在该服务中写下您的Notification代码。

  2. 使用数据库存储您的所有Alarms,然后使用BOOT_COMPLETED Broadcast reciver在设备重新启动时重新安排它们。