我想知道是否有某种方式使用可能的视图或某些内容来检测前台应用程序是否全屏显示后台服务。意味着状态栏被隐藏或未隐藏。
我在考虑使用常量字符串来检测视图是否显示?但我不确定。如果需要,Root是一个选项。
谢谢你们!
答案 0 :(得分:10)
如何使用广播接收器或类似的东西。这将是理想的,但是对于全屏请求没有这样的广播。
然而,这是我所做的。
我创建了一个不可见的叠加层,这个不可见的叠加层大小为0 x 0:)
然后我使用View.getLocationOnScreen(int[]);
这将返回int数组,其中包含x和y坐标的值。然后我测试这些坐标(只关注y值),如果它等于0,那么当前可见活动是全屏,(因为它是屏幕上最高的区域)如果显示状态栏,那么视图将返回(我的设备上有50个像素),这意味着视图距屏幕边缘顶部50个像素。
我把所有这些放在一个有计时器的服务中,当计时器到期时,它获取位置,运行测试,并做我需要做的事情。然后在屏幕关闭时取消计时器。屏幕打开时,计时器重新启动。
我检查了它使用了多少CPU,并且在System Tuner中显示了0.0%。
答案 1 :(得分:1)
您是否尝试过getWindow().getAttributes().flags
?
public static boolean fullScreen = (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0;
public static boolean forceNotFullScreen = (getWindow().getAttributes().flags & WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN) != 0;
public static boolean actionbarVisible = getActionBar().isShowing();
参考:
if( MyActivity.fullScreen){
// full screen
}
else{
// not full screen
}
答案 2 :(得分:0)
我喜欢Seth的想法,所以我制作了代码片段:
/**
* Check if fullscreen is activated by a position of a top left View
* @param topLeftView View which position will be compared with 0,0
* @return
*/
public static boolean isFullscreen(View topLeftView) {
int location[] = new int[2];
topLeftView.getLocationOnScreen(location);
return location[0] == 0 && location[1] == 0;
}