0

我正在我们的 Android 应用程序中实现 PiP。这是一个导航应用程序,它的主要活动是全屏地图。当最小化(例如使用主页按钮)时,它会通过 onUserLeaveHint() 正确进入 PiP 模式。问题是主要活动有一些打开次要活动的功能,有时应用程序也会进入画中画模式。

我做错了什么或者我必须改变什么以确保应用程序仅在应用程序“最小化”时进入画中画?

这是一些代码,但我认为没有什么特别的。

这是进入画中画模式:

@Override
protected void onUserLeaveHint() {
    if (iWantToBeInPipModeNow()) { //internal logic to allow PiP
        PictureInPictureParams params = new PictureInPictureParams.Builder()
                        .setAspectRatio(new Rational(9, 16))
                        .build();
        enterPictureInPictureMode(params);
    }
}

这是打开次要活动:

@Override
public void onClick(View v) {
    if (v == myButton) {
        Intent intent = new Intent(getContext(), SomeActivity.class);
        startActivityForResult(intent, REQ_SELECT_TYPE);
    }
}
4

1 回答 1

1

onUserLeaveHint()不是检测“主页”按钮点击的可靠 Android 生命周期回调。尽管官方文档指定您可以使用它来检测“当用户按下 Home 键时”,但我发现这是错误的。

例如,onUserLeaveHint()可能会在提示 Android 原生对话框时调用,或者在您启动另一个 Activity 时调用。我还发现,当启用手势导航(Android 11 及更高版本)并且用户转到“最近”然后存在应用程序时 -onUserLeaveHint()将不会被调用。

不幸的是,直到今天我还没有找到任何密封的方法来检测 Android 中的“主页”按钮点击。我猜操作系统设计者不希望应用程序开发人员轻易检测到这一点。

于 2021-05-18T14:00:41.977 回答