如果设备已经处于唤醒状态,则会在BroadcastReceiver中为AlarmManager调用onReceive

时间:2013-04-20 06:49:53

标签: android alarmmanager

我无法让BroadcastReceiver工作。 onReceive没有被调用。我没有使用服务。我在我的activity的onCreate方法中设置闹钟。我也在使用RTC_WAKEUP。但是,如果我的设备已经清醒怎么办? onReceive会被调用吗?即使设备处于唤醒状态,我也希望onReceiver被调用。通常情况下,即使设备处于睡眠状态,我也需要调用接收器,但我也想在手动启动活动时执行接收器执行的代码。以下是我开始报警的方式:

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, ServiceStarter.class);
PendingIntent pi = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),  pi);

在清单中:

<receiver  android:process=":remote" android:name=".ServiceStarter" android:exported="true"></receiver>

1 个答案:

答案 0 :(得分:1)

  

但是如果我的设备已经清醒怎么办? onReceive会被调用吗?

  

以下是我开始报警的方式:

您正在使用getActivity()。该组件不是Activity。这是BroadcastReceiver。使用getBroadcast()构建一个PendingIntent来触发BroadcastReceiver

  

在清单中:

删除android:process="remote",因为您不需要它,并且通过浪费RAM来损害用户。此外,删除android:exported="true",因为您不需要它,并且通过允许任何人触发您的BroadcastReceiver来削弱安全性。