如果设备已经清醒,onReceive是否会在BroadcastReceiver中为AlarmManager调用

问题描述:

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

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> 

但是,如果我的设备已经醒了吗? onReceive会被调用吗?

是的。

这里是我如何开始我报警:

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

在清单:

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