屏幕关闭时如何启动活动?

时间:2013-04-05 16:39:44

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

我有一个应用程序只在设备屏幕关闭时才能正常工作。我已经设置了广播接收器(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执行到结束但活动未启动。我正在使用以下代码开始此活动:

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分钟(这是不可接受的)

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

  • 当任何设备连接到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();

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

两个问题:

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

2)如果您有两个必须启动活动的事件,会发生什么? (例如,#34;开始的事情"以及"完成的事情"。)您必须解决这个问题,既要显示事件,要么只显示最新事件。

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