[有时]使用startActivityForResult()调用onUserLeaveHint()

时间:2019-06-10 11:38:32

标签: android android-picture-in-picture

我正在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);
    }
}

1 个答案:

答案 0 :(得分:0)

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

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

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