测试 keepScreenOn 属性
Test for keepScreenOn attribute
鉴于我有一个简单的 Android activity 和以下视图代码:
<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>
然后:
我如何测试此 activity 是否会保持屏幕打开并防止平板电脑进入睡眠状态?
旁注:
如果我像这样在 Activity (onCreate) 中设置 FLAG_KEEP_SCREEN_ON
标志:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
然后我可以像这样通过 Robolectric 轻松阅读它:
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());
}
但是,当视图层次结构中的单个视图定义标志时,不会设置标志。
我是否需要迭代所有视图,只是为了找到一个定义它的视图?
我搜索了 Robolectric 这个标志的来源,但没有找到任何东西。我已经为它创建了 issue。
您已经找到解决方法 - 以编程方式设置它,在这种情况下您可以对其进行测试。并且你可以不用反射来测试它:
assertThat( shadowWindow.getFlag( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON ), is( true ) );
鉴于我有一个简单的 Android activity 和以下视图代码:
<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>
然后:
我如何测试此 activity 是否会保持屏幕打开并防止平板电脑进入睡眠状态?
旁注:
如果我像这样在 Activity (onCreate) 中设置 FLAG_KEEP_SCREEN_ON
标志:
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
然后我可以像这样通过 Robolectric 轻松阅读它:
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());
}
但是,当视图层次结构中的单个视图定义标志时,不会设置标志。
我是否需要迭代所有视图,只是为了找到一个定义它的视图?
我搜索了 Robolectric 这个标志的来源,但没有找到任何东西。我已经为它创建了 issue。
您已经找到解决方法 - 以编程方式设置它,在这种情况下您可以对其进行测试。并且你可以不用反射来测试它:
assertThat( shadowWindow.getFlag( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON ), is( true ) );