Android的报警管理和广播接收器 [英] Android Alarm Manager and BroadcastReceiver
问题描述
我试着去设置闹钟,将意图发送到广播接收机。然后reciever应在logcat中说明它一直打印一行。不过我越来越没有迹象表明reciever正在接收任何东西。我已经检查了所有我能想到的东西。有人可以给我一些指导,我很茫然?
报警方式
公共无效scheduleNextUpdate()
{ 意向意图=新意图(MainActivity.this,AlarmReceiver.class);
的PendingIntent的PendingIntent =
PendingIntent.getBroadcast(这一点,0,意向,PendingIntent.FLAG_UPDATE_CURRENT);
长的currentTimeMillis = System.currentTimeMillis的();
长nextUpdateTimeMillis =的currentTimeMillis * DateUtils.MINUTE_IN_MILLIS;
时间nextUpdateTime =新时代();
nextUpdateTime.set(nextUpdateTimeMillis); 如果(nextUpdateTime.hour< 8 || nextUpdateTime.hour> = 22)
{
nextUpdateTime.hour = 8;
nextUpdateTime.minute = 0;
nextUpdateTime.second = 0;
nextUpdateTimeMillis = nextUpdateTime.toMillis(假)+ DateUtils.DAY_IN_MILLIS;
}
AlarmManager alarmManager =(AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC,nextUpdateTimeMillis,的PendingIntent);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,nextUpdateTimeMillis,nextUpdateTimeMillis,的PendingIntent); 布尔alarmUp =(PendingIntent.getBroadcast(这一点,0,
新意图(MainActivity.this,AlarmReceiver.class)
PendingIntent.FLAG_NO_CREATE)= NULL)!; 如果(alarmUp)
{
Log.d(MyTag的,报警已经被激活);
}
}
ReceiverClass
公共类AlarmReceiver扩展广播接收器{
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
的System.out.println(报警接收);
意图=新意图(背景下,MainActivity.class);
的PendingIntent的PendingIntent = PendingIntent.getService(上下文,0,意图,0);
的System.out.println(报警接收);
}
清单
<接收机器人:名字=。AlarmReceiver>< /接收器>
这似乎数学错误。我相信你正在尝试设置闹钟不会熄灭了几代人:
长的currentTimeMillis = System.currentTimeMillis的();
长nextUpdateTimeMillis =的currentTimeMillis * DateUtils.MINUTE_IN_MILLIS;
也许你的意思的警报在一分钟内熄灭:
长nextUpdateTimeMillis = +的currentTimeMillis DateUtils.MINUTE_IN_MILLIS;
反正起初用途:
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis的()+ 10000,
5000,
的PendingIntent);
要确认您的设置是正确的,如果是这样你需要重新计算你的 nextUpdateTimeMillis
。
Im trying to set an alarm that will send an intent to a broadcast receiver. The reciever should then print a line in the logcat stating it has worked. However I'm getting no indication that the reciever is receiving anything. I've checked all the things I can think of. Can someone give me some guidance as I am at a loss?
Alarm Method
public void scheduleNextUpdate()
{
Intent intent = new Intent(MainActivity.this,AlarmReceiver.class);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
long currentTimeMillis = System.currentTimeMillis();
long nextUpdateTimeMillis = currentTimeMillis * DateUtils.MINUTE_IN_MILLIS;
Time nextUpdateTime = new Time();
nextUpdateTime.set(nextUpdateTimeMillis);
if (nextUpdateTime.hour < 8 || nextUpdateTime.hour >= 22)
{
nextUpdateTime.hour = 8;
nextUpdateTime.minute = 0;
nextUpdateTime.second = 0;
nextUpdateTimeMillis = nextUpdateTime.toMillis(false) + DateUtils.DAY_IN_MILLIS;
}
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, nextUpdateTimeMillis, pendingIntent);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, nextUpdateTimeMillis,nextUpdateTimeMillis,pendingIntent);
boolean alarmUp = (PendingIntent.getBroadcast(this, 0,
new Intent(MainActivity.this,AlarmReceiver.class),
PendingIntent.FLAG_NO_CREATE) != null);
if (alarmUp)
{
Log.d("myTag", "Alarm is already active");
}
}
ReceiverClass
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("Alarm Received");
intent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
System.out.println("Alarm Received");
}
The manifest
<receiver android:name=".AlarmReceiver"></receiver>
This math seems wrong. I believe you are trying to set an alarm that won't go off for a few generations:
long currentTimeMillis = System.currentTimeMillis();
long nextUpdateTimeMillis = currentTimeMillis * DateUtils.MINUTE_IN_MILLIS;
Maybe you meant for the alarm to go off in one minute:
long nextUpdateTimeMillis = currentTimeMillis + DateUtils.MINUTE_IN_MILLIS;
Anyway first use:
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + 10000,
5000,
pendingIntent);
To confirm your setup is correct, if so you need to recalculate your nextUpdateTimeMillis
.
这篇关于Android的报警管理和广播接收器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!