Обнаружение события закрытия и максимального нажатия в режиме "картинка в картинке" в Android
Как я могу определить, нажал ли пользователь на кнопку закрытия и максимизации в маленьком окне PIP? Есть ли слушатели, которых я могу слушать? Прямо сейчас мой приемник слушает только те элементы управления, которые я определил в своем макете, но как насчет нестандартных кнопок, таких как кнопка [] max и кнопка X close, которые являются частью PIP . См. Ссылку
5 ответов
Невозможно обнаружить щелчки ни на одной из кнопок PiP по умолчанию.
Когда ваше действие переходит в режим PiP, фактически запускается другое системное действие, называемое PiPMenuActivity. Внутри этих кнопок PiP установлено несколько OnClickListeners. Когда они нажимаются, в систему не отправляются никакие трансляции, намерения или что-то в этом роде, чтобы вы могли их прослушивать, ни PiP API не предоставляет метод для прикрепления слушателя к этим кнопкам.
На данный момент единственный способ определить это - использовать методы onResume и onStop вашей активности. Когда активность восстанавливается из PiP, для вашей Activity вызываются обратные вызовы onResume и onPictureInPictureModeChanged. При нажатии кнопки закрытия вызываются обратные вызовы onStop и onPictureInPictureModeChanged.
Вот обновленное решение, работающее на меня для закрытия и максимизации события.
@Override
public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) {
if(newConfig !=null){
videoPosition = playerManager.getCurrentPosition();
isInPipMode = !isInPictureInPictureMode;
}
if (getLifecycle().getCurrentState() == Lifecycle.State.CREATED) {
finishAndRemoveTask();
//when user click on Close button of PIP this will trigger, do what you want here
}
else if (getLifecycle().getCurrentState() == Lifecycle.State.STARTED){
//when PIP maximize this will trigger
}
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig);
}
@Artenes Nogueira, вы правы, невозможно обнаружить события щелчка на кнопках PiP по умолчанию, но есть способ узнать, что происходит. Вы должны переопределить
onPictureInPictureModeChanged
метод и проверьте жизненный цикл активности.
Здесь вы можете найти понятный пример кода:
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration?) {
if (lifecycle.currentState == Lifecycle.State.CREATED) {
//user clicked on close button of PiP window
finishAndRemoveTask()
}
else if (lifecycle.currentState == Lifecycle.State.STARTED){
if (isInPictureInPictureMode) {
// user clicked on minimize button
} else {
// user clicked on maximize button of PiP window
}
}
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
}
override fun onPictureInPictureModeChanged(
isInPictureInPictureMode: Boolean,
newConfig: Configuration?
) {
if (isInPictureInPictureMode) {
} else {
if (lifecycle.currentState == Lifecycle.State.STARTED) {
// todo finish your app
}
}
}
по-другому я это искал, и я могу решить это таким образом.
Мне нужно было определить, когда пользователь нажал кнопку закрытия окна пипса. Я закончил тем, что слушалonDestroy
функция из JitsiMeetActivity.