5

我想知道是否有某种方式使用视图或其他东西来让后台服务检测前台应用程序是否处于全屏状态。表示状态栏隐藏或不隐藏。

我在想也许使用常量字符串来检测是否显示视图?但我不确定。如果需要,根是一个选项。

多谢你们!!

4

3 回答 3

10

如何使用广播接收器或类似的东西。这将是理想的,但是对于全屏请求没有这样的广播。

这是我所做的。

我创建了一个不可见的叠加层,这个不可见的叠加层大小为 0 x 0 :)

然后我用View.getLocationOnScreen(int[]);

这将返回具有 x 和 y 坐标值的 int 数组。然后我测试这些坐标(只关注y值)如果它等于0,那么当前可视活动是全屏的,(因为它是屏幕上最高的区域)如果状态栏正在显示,那么视图将返回(在我的设备上为 50 像素),这意味着视图距离屏幕边缘顶部 50 像素。

我将所有这些都放在一个有计时器的服务中,当计时器到期时,它会获取位置、运行测试并执行我需要做的事情。然后当屏幕关闭时取消计时器。屏幕打开后,计时器重新启动。

我检查了它使用了多少 CPU,它在 System Tuner 中显示为 0.0%。

于 2013-08-08T21:40:24.757 回答
2

我喜欢 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;
}
于 2015-04-24T08:50:23.737 回答
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
}
于 2013-08-05T01:55:13.630 回答