android - 在三星手机上进入 PIP(画中画)模式时出现错误“设备不支持画中画模式”
问题描述
我在 Android O 手机(各种三星版本)上使用 PIP 模式,效果很好。但是,如果我打开辅助功能模式,我会得到
java.lang.IllegalStateException·enterPictureInPictureMode: Device doesn't support picture-in-picture mode
进入 PIP 模式时。在输入 PIP 之前,我会检查 PackageManager.FEATURE_PICTURE_IN_PICTURE 以及 AppOpsManager.OPSTR_PICTURE_IN_PICTURE 是否启用(两者都返回 true)。“设备不支持画中画模式”的消息显然具有误导性和错误性,但是在这种情况下有什么方法可以检查 PIP 是否可用?
请注意,这似乎是三星唯一的问题,因为我尝试了各种三星手机和平板电脑(S8、Note 8、Tab S3、Tab S4),它们都崩溃了。Google Pixel 3 手机没有这个问题。
解决方案
我彻底浏览了相关文件的源代码,但找不到任何对我们可见的 API。所以现在,我已经放置了一个下面的解决方案,以防它也对你有帮助。
/**
* Trying to enter Picture In Picture mode on a Samsung device while an accessibility service
* that provides spoken feedback would result in an IllegalStateException.
*/
public static boolean isScreenReaderActiveAndTroublesome(Activity activity) {
final String affectedManufacturer = "samsung";
final String deviceManufacturer = android.os.Build.MANUFACTURER.toLowerCase();
if (affectedManufacturer.equals(deviceManufacturer)) {
final AccessibilityManager am =
(AccessibilityManager) activity.getSystemService(Context.ACCESSIBILITY_SERVICE);
final List<AccessibilityServiceInfo> enabledScreenReaderServices =
am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN);
final boolean isScreenReaderServiceActive = !enabledScreenReaderServices.isEmpty();
if (isScreenReaderServiceActive) {
Log.e(TAG, "Screen reader is active on this Samsung device, PIP would be disabled");
}
return isScreenReaderServiceActive;
}
return false;
}
推荐阅读
- r - 如何根据 R 中的某些条件和总和值对多行进行分组?
- azure - Azure 中继混合连接请求响应完整性
- python - 两个独立的 Flask 应用程序在 docker 容器中通信
- android - 逐步帮助将广告帐户与应用程序相关联以进行应用程序安装事件。
- c# - 实体框架代码优先以意外方式生成表/键
- unity3d - 如何在 Unity2D 中添加分数?
- android - 如何使用 asynchttp 从 django rest 框架将数据发送回 Android 应用程序?
- java - JAVA - 如何忽略所有包含非字母字母的单词
- php - 同时增加多行的价值
- firefox - 如何强制 Firefox 56 重新加载旧版附加组件?