【问题标题】:Receive callback from AlarmManager while screen is locked屏幕锁定时从 AlarmManager 接收回调
【发布时间】:2013-06-18 13:37:08
【问题描述】:

我正在使用 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 被调用,无论我是否关闭屏幕,或者它是否被锁定 - 但显然情况并非如此。

谁能指出我错在哪里?

【问题讨论】:

    标签: android alarmmanager screen-lock


    【解决方案1】:

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

    答案基本上是这样的

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-05
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-10
      • 2013-04-15
      相关资源
      最近更新 更多