【问题标题】:Why WakefulBroadcastReceiver don't wake my device from deep sleep?为什么 WakefulBroadcastReceiver 不能将我的设备从深度睡眠中唤醒?
【发布时间】:2016-04-08 01:01:51
【问题描述】:

我正在训练使用可触发服务的 WakefulBroadcastReceiver 唤醒我的设备。该服务启动一个 Activity 并在最后通知 WakefulBroadcastReceiver 以结束该作业。我制作了一个日志文件,但我没有看到任何事情发生。当我解锁设备时,几秒钟后,活动开始。为什么我设置闹钟时不做?

Manifest 包含 BroadcastReceiver 和 Service 声明以及 WAKE_LOCK 权限。

这是 WakefulBroadcastReceiver:

public class AlarmBroadcastReceiver extends WakefulBroadcastReceiver {

    public AlarmBroadcastReceiver() {
        Logging.logToFile("Construct broadcast receiver");
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service = new Intent(context, AlarmService.class);
        startWakefulService(context, service);
        Logging.logToFile("Started wakeful broadcast receiver");
    }
}

这里是服务类:

public class AlarmService extends IntentService {

    public AlarmService() {
        super("AlarmService");
        Logging.logToFile("Started intent service");
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        Logging.logToFile("Handle intent service");
        Intent service = new Intent(this, WakeUpActivity.class);
        service.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(service);

        AlarmBroadcastReceiver.completeWakefulIntent(intent);

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Logging.logToFile("Destroy intent service");
   }
}

这是我的日志:

At 2016-04-01 23:14: Alarm set at 23:20 
At 2016-04-01 23:23: Construct broadcast receiver
At 2016-04-01 23:23: Started wakeful broadcast receiver
At 2016-04-01 23:23: Started intent service
At 2016-04-01 23:23: Handle intent service
At 2016-04-01 23:23: Started WakeActivity 
At 2016-04-01 23:23: Destroy intent service
At 2016-04-01 23:25: Alarm set at 23:30 
At 2016-04-01 23:33: Construct broadcast receiver
At 2016-04-01 23:33: Started wakeful broadcast receiver
At 2016-04-01 23:33: Started intent service
At 2016-04-01 23:33: Handle intent service
At 2016-04-01 23:33: Destroy intent service
At 2016-04-01 23:33: Started WakeActivity 
At 2016-04-01 23:34: Alarm set at 23:40 
At 2016-04-01 23:42: Construct broadcast receiver
At 2016-04-01 23:42: Started wakeful broadcast receiver
At 2016-04-01 23:42: Started intent service
At 2016-04-01 23:42: Handle intent service
At 2016-04-01 23:42: Destroy intent service
At 2016-04-01 23:42: Started WakeActivity 
At 2016-04-01 23:43: Started WakeActivity 
At 2016-04-01 23:44: Alarm set at 23:49 
At 2016-04-02 00:02: Construct broadcast receiver
At 2016-04-02 00:02: Started wakeful broadcast receiver
At 2016-04-02 00:02: Started intent service
At 2016-04-02 00:02: Handle intent service
At 2016-04-02 00:02: Started WakeActivity 
At 2016-04-02 00:02: Destroy intent service

编辑:这就是我设置闹钟的方式:

Intent intent = new Intent(SmartClockActivity.this, AlarmBroadcastReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(SmartClockActivity.this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);

【问题讨论】:

  • 请说明您是如何设置闹钟的
  • @DavidMedenjak,完成。

标签: android android-intent alarmmanager android-wake-lock


【解决方案1】:

我建议您使用服务并在那里进行处理。我认为您的应用程序很可能被杀死,因此链接到创建它的 Activity 的 IntentService 也被杀死。 尝试使用完整的服务范围,它必须解决您的问题。

【讨论】:

  • 谢谢!我会尽快尝试。
猜你喜欢
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
相关资源
最近更新 更多