Обнаружение события закрытия и максимального нажатия в режиме "картинка в картинке" в 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.

Другие вопросы по тегам