鉴于我有一个简单的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>
然后:
如何测试此活动是否会启用此屏幕并阻止平板电脑进入睡眠状态?
如果我在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());
}
但是,当视图层次结构中的单个视图定义标志时,不会设置该标志。
我是否需要迭代所有视图,只是为了找到定义此视图的视图?
答案 0 :(得分:0)
我在Robolectric的消息来源搜索了这面旗帜并没有找到任何东西。我为它创建了issue。
您已经找到了解决方法 - 在这种情况下以编程方式设置它可以测试它。你可以不加思考地测试它:
assertThat( shadowWindow.getFlag( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON ), is( true ) );