#android #samsung-mobile #android-picture-in-picture
#Android #samsung-мобильный #android-картинка в картинке
Вопрос:
Я использую режим PIP на телефоне Android O (различные версии Samsung), и он работает нормально. Однако, если я включу режим специальных возможностей, я получу
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 в этом случае?
Обратите внимание, что, похоже, это проблема только Samsung, поскольку я пробовал различные телефоны Samsung и планшеты (S8, Note 8, Tab S3, Tab S4), и все они вышли из строя. У телефона Google Pixel 3 этой проблемы не было.
Комментарии:
1. Привет, смогли ли вы выяснить основную причину и получить какое-либо решение?
2. Нет, к сожалению, все то же самое.
3. Пожалуйста, смотрите ниже мое решение. Есть идеи получше?
Ответ №1:
Я тщательно просмотрел исходный код связанных файлов, но не смог найти какой-либо видимый нам 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;
}
Комментарии:
1. Спасибо за ответ. Я думаю, что лучшим решением является установка try / catch вокруг enterPictureInPictureMode в onUserLeaveHint. Он охватывает все возможные случаи, включая конкретный случай Samsung, и если Samsung исправит ошибку, он просто будет работать без внесения каких-либо изменений в код. Однако он по-прежнему не отвечает на главный вопрос о том, как заставить его работать на устройствах Samsung.