0

我有一个应用程序,它只在设备屏幕关闭时才开始工作。我已经设置了广播接收器 ( Intent.ACTION_SCREEN_OFF),它工作正常。当设备屏幕关闭时,我总是在我的 LOGCAT 中记录。到目前为止,一切都很好。

onReceive来自 ACTION_SCREEN_OFF 的代码使用了一些代码计算的东西,并且一切都执行得很好(当屏幕熄灭时)。到目前为止,一切都很好。

在我的onReceive代码结束时,我开始了新的活动,但onCreate目标活动并不总是在执行。(例如,在我的 HTC Desire 2.3.7 上工作正常。在 HTC Wildfire S 2.3.5、Xperia Arc S 2.3.4 上它不执行,而在三星 Galaxy ACE 2.2.1 上,这取决于。有时正在执行有时不是' t)。我的 LOGCAT 显示onReceive执行到最后但 Activity 没有启动。我正在使用以下代码开始此活动:

Intent startH_Activity = new Intent(getApplicationContext(), HandleActivity.class);
        startH_Activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startH_Activity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(startH_Activity);

需要注意的重要事项:

  • 我说在上面提到的某些手机上它不起作用。好吧,它不能立即工作,就像它应该的那样(当 SCREEN_OFF 触发时)。总是在屏幕关闭后 10-15 分钟开始活动(这是不可接受的)

  • 当屏幕熄灭且活动未启动时,如果我按下设备上的电源按钮,它会立即关闭我的目标活动,并且应用程序正常工作。(同样这是不可接受的。它应该自动触发)。

  • 当任何设备连接到 PC 时,它都可以正常工作。屏幕关闭后立即开始活动。

在阅读了很多 Stack Overflow 之后,我意识到这是因为 MAYBE 设备进入了睡眠状态。这就是为什么如果我按下 POWER 按钮它会正常工作,或者在 10-15 分钟后自动唤醒,因为它是同步的或其他东西。所以我使用了 WAKELOCK。

//OnCreate Service
powMan = (PowerManager) getSystemService(POWER_SERVICE);
wake = powMan.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");

//OnReceive (screen goes off)
wake.acquire();

但仍然没有成功。(我做错了吗?)即使获得了唤醒锁定,我的活动也不会出现在这些设备上。

基本上就是我要问的。屏幕关闭时如何打开常规活动?或者至少在活动无法启动时如何打开屏幕(请记住,按下电源按钮会显示我的活动

我现在真的需要一些帮助,因为我对此感到非常沮丧。谢谢你的帮助。

4

2 回答 2

0

当屏幕熄灭时,您应该启动 Service 而不是 Activity。

于 2013-04-05T16:53:13.940 回答
0

我会注册另一个广播接收器并在屏幕打开时启动活动(Intent.ACTION_SCREEN_ON)。

两个问题:

1)你如何将数据从一个接收器传递到另一个接收器?我想到的是启动服务或将信息保存到文件(或共享首选项)。

2)如果你有两个必须启动一个活动的事件会发生什么?(例如“某事开始”和“某事完成”。)您必须解决这个问题,要么显示两个事件,要么只显示最新的一个。

请注意,用户可以在不解锁屏幕的情况下打开和关闭屏幕 ( Intent.ACTION_USER_PRESENT),并且如果手机配置为不锁定屏幕,Intent.ACTION_USER_PRESENT则不会发生这种情况。

于 2015-10-26T07:40:54.587 回答