【问题标题】:How do i start activity when screen goes off?屏幕熄灭时如何启动活动?
【发布时间】:2013-04-05 16:39:43
【问题描述】:

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

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

在我的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 设备进入睡眠状态。这就是为什么如果我按下电源按钮,它会像正常工作一样工作,或者在 10-15 分钟后自动唤醒,因为它是同步的或什么的。所以我使用了 WAKELOCK。

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

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

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

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

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

【问题讨论】:

标签: java android android-intent android-activity broadcastreceiver


【解决方案1】:

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

【讨论】:

  • 我需要活动来向用户显示一些数据,而我在服务中无法做到这一点。
  • 那么你不应该在 SCREEN_OFF 上这样做。用户可以控制设备,只有他们才能用手指(或声音;或脑电波)开始活动。
  • 所以你认为android设备没有闹钟或其他东西?闹钟的工作原理与我的应用程序相同。它将手机从睡眠中唤醒并显示一个活动(闹钟显示用户选择他要做什么的活动:禁用闹钟、贪睡..等)
  • 然后阅读AlarmManager。您的问题中没有提及时钟。
  • 哇,这太奇怪了。所以我有一个活动,其唯一目的是观察屏幕进入睡眠状态,然后观察接近警报或屏幕唤醒,并跟踪每个事件发生的时间并在屏幕恢复时显示结果在。似乎没有什么需要增加服务的复杂性,但是一旦屏幕关闭就会在我的应用程序上调用 onStop (但前提是我从 API 级别 10 到 11)似乎有必要!
【解决方案2】:

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

两个问题:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多