测试keepScreenOn属性



假设我有一个简单的Android活动与以下视图代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             tools:ignore="MergeRootFrame"
             android:keepScreenOn="true">
     <!-- more views -->
</FrameLayout>

:

如何测试此活动将保持屏幕打开并防止平板电脑进入睡眠状态?

旁注:

如果我像这样设置活动(onCreate)中的FLAG_KEEP_SCREEN_ON标志:

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

那么我可以很容易地通过robolelectric像这样读取它:

public static int getWindowFlags(final Activity activity) throws Exception {
    Class clazz = Class.forName(Window.class.getName());
    Method m = clazz.getMethod("getForcedWindowFlags");
    m.setAccessible(true);
    return (int) m.invoke(activity.getWindow());
}

但是,当视图层次结构中的单个视图定义了该标志时,该标志没有被设置。

我需要迭代所有的视图,只是为了找到一个视图,定义这个吗?

我搜索了robolelectrical sources for this flag,没有找到任何东西。我为它创建了一个问题。

您已经找到了解决方案-以编程方式设置它,在这种情况下您可以测试它。你可以在没有反射的情况下进行测试:

assertThat( shadowWindow.getFlag( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON ), is( true ) );

相关内容

  • 没有找到相关文章

最新更新