屏幕锁定时从AlarmManager接收回调

时间:2013-06-18 13:37:09

标签: android alarmmanager screen-lock

我正在使用Android AlarmManager在特定时间接收活动。

    alarm_manager = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarm_manager.set(AlarmManager.RTC_WAKEUP, target_time, pending_intent);

挂起的意图是这样创建的:

    pending_intent = createPendingResult(PENDING_INTENT_ID, new Intent(), 0);

为了在手机关机时触发闹钟,我获得了部分唤醒锁:

    power_manager = (PowerManager)getSystemService(POWER_SERVICE);
    wake_lock = power_manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getString(R.string.app_name));
    wake_lock.acquire();

事件在onActivityResult回调中处理:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

我的问题是,如果我开始活动,然后按手机上的电源按钮(关闭屏幕+锁定它),直到用户再次打开手机才会发送事件,并解锁屏幕。

我认为它与锁定屏幕有关(可能是因为屏幕被锁定,安卓认为意图无论如何都不会做任何事情?) - 但我发现我的问题几乎没有信息。使用部分唤醒锁定,无论是否关闭屏幕,或者它是否被锁定,我都希望调用onActivityResult - 但显然情况并非如此。

有人能指出我哪里错了吗?

1 个答案:

答案 0 :(得分:0)

有人回答,但由于某种原因,答案消失了,否则我会接受它。

答案基本上是那个

    pending_intent = createPendingResult(PENDING_INTENT_ID, new Intent(), 0);

不可靠,建议使用广播接收器。我仍然不知道为什么他们不工作(我评论答案询问他们是否知道更多),但无论如何。我写了

    broadcastReceiver = new AlertBroadcastReceiver(this);
    registerReceiver(broadcastReceiver, new IntentFilter("SomeAction"));

并添加了一个广播接收器来处理这个问题,这很有效。