4

我想弄清楚我应该如何启动通知。创建通知不是我要的,而是一种在后台启动它的方式,这样它不引人注目,用户可以做他们正在做的任何事情。它的日历,准确的提醒。同样重要的是要注意我正在使用AlarmManager.

  1. 我应该使用什么方法在后台运行它。BroadCastReciever,Service等。

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

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

4

3 回答 3

3

创建一个广播接收器或意图服务。然后...

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"/>

作为清单中接收器上的意图过滤器,并在 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 操作,因此您的接收器也会在发生这种情况时被调用。

于 2012-07-06T03:09:09.463 回答
2

使用 AlarmManager 是最佳实践。

于 2012-07-06T02:57:17.940 回答
1

这是您可以执行的操作:

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

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

于 2012-07-06T05:12:05.287 回答