0

我正在使用 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) {

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

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

谁能指出我错在哪里?

4

1 回答 1

0

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

答案基本上是这样的

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

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

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

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

于 2013-06-18T14:29:03.317 回答