0

我知道这似乎是一个奇怪的问题,但我需要:

  1. 睡前获取信息
  2. 睡觉
  3. 做任务
  4. 醒来
  5. 获取断言结果

我尝试的是在测试的设置部分启用睡眠,不幸的是它会杀死一切(我知道这应该按照android的标准发生)。

谢谢,凯利

4

2 回答 2

0

如果设备处于某种“睡眠”模式,那么您实际上无法做任何事情。听起来,您需要保留唤醒锁。

http://developer.android.com/reference/android/os/PowerManager.WakeLock.html

有不同级别的唤醒锁,您可能只需要一个允许屏幕关闭但仍允许您运行代码的锁。显然,这会影响电池性能,因此请确保您需要在设备“休眠”时进行操作,并确保在完成后释放唤醒锁!

于 2012-01-14T18:01:13.007 回答
0

啊哈!

好的,至少要确保研究屏幕的状态。您想要执行以下操作:

在您的模拟器中,转到 Settings \ Applications \ Development 区域并取消选中“Stay Awake”

此时,锁定您的模拟器。您应该会看到锁定屏幕。

现在,运行唤醒锁测试。

对我来说,我做了以下事情(使用 roboguice 1.1.2)

@MediumTest
public void test_And_Screen_Is_In_Sleep_It_Should_Not_Make_Screen_Bright() throws Exception
{
    //currently test hates this even after I have assigned it the proper rights
    //to quote Ted Striker: What a pisser! :)
    //_power.get().goToSleep(0);

    boolean screenOn = _power.get().isScreenOn();

    assertFalse(screenOn);

    if (!screenOn)
    {
        _wake.get();

        boolean screenOn1 = _power.get().isScreenOn();

        assertFalse(screenOn1);
    }

    if (_wake != null)
    {
        _wake.release();
    }
}

我有一个名为 IWake 的接口,如下所示:

public interface IWake
{
    void get();

    void release();
}

在 IWake 的实现中,我简单地设置类来完成获取 (get()) 和释放(这也是 release())的所有繁重工作

为了强制测试设备锁定,我想出了一个好主意,因为您(通常)不能在 PowerManager 中使用该睡眠方法。

做这个!

在我的测试方法中,我为设置做了这个:

@Override
public void setUp() throws Exception
{
    super.setUp();

    _pwr = (PowerManager) getInstrumentation().getContext().getSystemService(Context.POWER_SERVICE);

    //setup timeout which is part of: android.provider.Settings.System
    System.putInt(getInstrumentation().getContext().getContentResolver(), System.SCREEN_OFF_TIMEOUT, 0);
}

基本上我决定在设置中将超时更改为 0。由于发生这种情况,它会立即将其锁定。这有多酷?:) 无论如何,我希望这对其他人有帮助

干杯,凯利

于 2012-01-15T03:22:43.973 回答