在 Android 8.0 以上。有什么办法可以知道系统中是否开启了 pip 模式

In Android 8.0 above. Is there any way to know there is pip mode on in the system

在Android奥利奥。 activity 可以进入 pip 模式并返回启动器。

https://developer.android.com/guide/topics/ui/picture-in-picture.html

现在我是发射器。有什么方法可以知道当前屏幕上显示了一个 pip windows?

isInPictureInPictureMode()只表示你的应用pipmode,如果有其他应用进入pip模式,则为false。

当您退出应用程序并转到 pipmode 返回启动器时,意图标志是相同的。

12-15 03:31:39.580 11671 11671 D FLAG_ACTIVITY_FORWARD_RESULT
12-15 03:31:39.580 11671 11671 D FLAG_ACTIVITY_NEW_TASK
12-15 03:31:39.580 11671 11671 D FLAG_ACTIVITY_PREVIOUS_IS_TOP
12-15 03:31:39.581 11671 11671 D FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
12-15 03:31:39.581 11671 11671 D FLAG_RECEIVER_BOOT_UPGRADE
12-15 03:31:39.581 11671 11671 D FLAG_RECEIVER_FOREGROUND
12-15 03:31:39.581 11671 11671 D FLAG_RECEIVER_INCLUDE_BACKGROUND
12-15 03:31:39.581 11671 11671 D FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS
12-15 03:31:50.174 11671 11671 D FLAG_ACTIVITY_FORWARD_RESULT
12-15 03:31:50.174 11671 11671 D FLAG_ACTIVITY_NEW_TASK
12-15 03:31:50.174 11671 11671 D FLAG_ACTIVITY_PREVIOUS_IS_TOP
12-15 03:31:50.174 11671 11671 D FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
12-15 03:31:50.174 11671 11671 D FLAG_RECEIVER_BOOT_UPGRADE
12-15 03:31:50.174 11671 11671 D FLAG_RECEIVER_FOREGROUND
12-15 03:31:50.174 11671 11671 D FLAG_RECEIVER_INCLUDE_BACKGROUND
12-15 03:31:50.174 11671 11671 D FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS

我检查了 pip 模式源代码,他们通过 WindowManagerService 控制了它。我不认为它可以通过应用程序级别访问。

您可以构建一个 AccessibilityService which can query the AccessibilityWindowInfos for isInPictureInPictureMode()

Note that Google is currently (late 2017) hunting down the abuse of accessibility service feature, so be cautious. This approach will very likely count as an abuse. Use this only if you couldn't find a better solution.

有关指南,请参阅 Developing an Accessibility Service

请注意,这需要提示用户许可,并且用户必须明确接受无障碍服务。