假设我有一个简单的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 ) );