在 Android 8.0 以上。有啥方法可以知道系统中是不是开启了 pip 模式
Posted
技术标签:
【中文标题】在 Android 8.0 以上。有啥方法可以知道系统中是不是开启了 pip 模式【英文标题】:In Android 8.0 above. Is there any way to know there is pip mode on in the system在 Android 8.0 以上。有什么方法可以知道系统中是否开启了 pip 模式 【发布时间】:2018-05-31 13:44:10 【问题描述】:在安卓奥利奥中。 Activity 可以进入 pip 模式并返回启动器。
https://developer.android.com/guide/topics/ui/picture-in-picture.html
现在我是发射器。有什么方法可以知道当前屏幕上显示了一个 pip 窗口吗?
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
,它可以在AccessibilityWindowInfo
s 中查询isInPictureInPictureMode()
。请注意,谷歌目前(2017 年末)正在追捕滥用无障碍服务功能,所以要小心。只有在找不到更好的解决方案时才使用它。 developer.android.com/reference/android/view/accessibility/…
我在 ServiceConnected 中使用 List<AccessibilityWindowInfo> windows = getWindows();
查询 Windows。它什么都没有,这正常吗?此方法也需要手动打开可访问性。
您需要请求某些权限才能使无障碍服务工作。用户必须批准它的注册。见developer.android.com/training/accessibility/service.html
酷。此解决方案适用于限制。该标志称为 FLAG_RETRIEVE_INTERACTIVE_WINDOWS。详细信息在函数getWindows();
的注释中指定,但这需要用户在设置中交互辅助功能。拥有完全无用户反应的解决方案会很好。
有趣的是,没有其他公共 API 可以做到这一点。我暂时将其作为答案发布,直到有人找到更好的解决方案。
【参考方案1】:
您可以构建一个AccessibilityService
,它可以在AccessibilityWindowInfo
s 中查询isInPictureInPictureMode()
。
请注意,Google 目前(2017 年末)正在追查滥用无障碍服务功能的行为,因此请谨慎行事。这种方法很可能被视为滥用。只有在找不到更好的解决方案时才使用它。
请参阅Developing an Accessibility Service 获取指南。
请注意,这需要提示用户许可,并且用户必须明确接受无障碍服务。
【讨论】:
以上是关于在 Android 8.0 以上。有啥方法可以知道系统中是不是开启了 pip 模式的主要内容,如果未能解决你的问题,请参考以下文章