1

我有一个只在设备屏幕熄灭时才开始工作的应用程序。我已经设置了广播接收机(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上,它取决于有时执行有时isn' 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时,它的工作方式应该如此。活动在屏幕熄灭后立即开始。

在阅读了很多堆栈溢出之后,我意识到这是因为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(); 

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

基本上我在问什么。如何在屏幕熄灭时打开常规活动?或者至少如何开启屏幕,如果活动不会开始(记住,按下电源按钮显示我的活动

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

+0

屏幕关闭!指屏幕锁定? http://chandan-tech.blogspot.in/2010/10/handling-screen-lock-unlock-in-android.html – Raghunandan 2013-04-05 18:08:57

+0

其实是的。我认为屏幕熄灭时所有设备都会锁定。 – rootpanthera 2013-04-05 18:37:39

回答

0

帮助时,屏幕熄灭你应该开始服务,而不是活动

+0

我需要活动来向用户显示一些数据,这是我在服务中无法做到的。 – rootpanthera 2013-04-05 17:00:54

+0

然后你不应该在SCREEN_OFF上这样做。用户正在控制设备,只有他们应该用手指(或声音;或脑电波)开始活动。 – 2013-04-05 17:10:02

+0

所以android设备没有闹钟或你的意见?闹钟的工作原理与我的应用程序相同。它将手机从睡眠中唤醒并显示一个活动(闹钟显示用户选择他要做什么的活动:禁用闹钟,贪睡..等) – rootpanthera 2013-04-05 17:36:36

0

我会注册又一广播接收器,当屏幕变亮(Intent.ACTION_SCREEN_ON)启动活动

两个问题:

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

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

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