我想知道如何发布通知。创建通知不是我要求的,而是一种在后台启动它的方式,因此它不引人注目,用户可以做他们正在做的任何事情。它用于日历,提醒确切。同样重要的是要注意我使用AlarmManager
。
我应该使用什么方法在后台运行它。 BroadCastReciever
,Service
等
我发现的研究也提出了AlarmManager
的问题。当应用程序被杀或手机关闭时,警报也是。我应该使用哪种其他方法来确保通知可以显示该事件提醒?
如果需要任何其他信息,请询问,我会这样做。提前谢谢。
答案 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)
以下是您可以做的事情:
通过您的Service
待审意图启动AlarmManager's
,并在该服务中写下您的Notification
代码。
使用数据库存储您的所有Alarms
,然后使用BOOT_COMPLETED
Broadcast reciver
在设备重新启动时重新安排它们。