琼恩snow 2022-12-28 13:52 采纳率: 0%
浏览 111
已结题

Android 12 画中画问题

Android 画中画
在Android 12 系统的手机(oppo 小米),home进入画中画,然后在恢复全屏模式,然后点击界面上其他按钮打开新界面,会出现 startActivity新的界面会延迟好久 或者 打不开新界面的情况。
按照官方文档使用安卓12的.setAutoEnterEnabled(true)依然不管用;
跳转不了、或者延迟、好像新页面在当前界面下面,因为home或者旋转屏幕后就打开了。
奇怪的是非home,手动调用enterPictureInPictureMode,就没有这个问题。貌似和home有关系。

大概代码如下


 Button btn_floating_open2 = findViewById(R.id.btn_floating_open2);
        btn_floating_open2.setOnClickListener(v -> {
            Intent intent = new Intent(FloatingActivity.this, TestActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            FloatingActivity.this.startActivity(intent);
        });

  @Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();
        enterPiPMode();
    }

 private void enterPiPMode() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//            videoPlayer.setIsInPictureInPictureMode(true);
            if (mPictureInPictureParamsBuilder == null) {
                mPictureInPictureParamsBuilder = new PictureInPictureParams.Builder();
            }
            // Calculate the aspect ratio of the PiP screen. 计算video的纵横比
            int mVideoWith = videoPlayer.getWidth();
            int mVideoHeight = videoPlayer.getHeight();
            if (mVideoWith != 0 && mVideoHeight != 0) {
                //设置param宽高比,根据宽高比例调整初始参数
                Rational aspectRatio = new Rational(mVideoWith, mVideoHeight);
                mPictureInPictureParamsBuilder.setAspectRatio(aspectRatio);
            }
            //进入pip模式
            enterPictureInPictureMode(mPictureInPictureParamsBuilder.build());
        }
    }

  • 写回答

4条回答 默认 最新

  • |__WhoAmI__| 2022-12-28 14:07
    关注

    1、可以试试在恢复全屏模式之前退出画中画模式。可以在应用程序的主活动中重写onStop()方法,并使用isInPictureInPictureMode()方法来检查下当前是否处于画中画模式,如果是,就退出画中画模式。

    2、也可以试试其他解决方案,比如使用其他方法来启动新界面,例如使用FragmentTransaction来替换当前的Fragment,或者使用Intent.FLAG_ACTIVITY_NEW_TASK标志来启动新的任务栈。

    3、还可以试试使用setAutoEnterEnabled(true)方法来自动进入画中画模式,这样在用户将应用程序置于后台时,它就会自动进入画中画模式。但是需要确保应用程序满足所有画中画模式的要求,例如提供可见且有意义的内容,并且没有较高的 CPU 使用率。

    4、另外如果发现非 home 状态下手动调用enterPictureInPictureMode没有出现问题,那么这可能是因为在 home 状态下调用enterPictureInPictureMode时可能会有其他应用程序在后台运行,导致应用程序受到较低的 CPU 优先级的限制。可以试试在 home 状态下停止其他应用程序的运行,然后再调用enterPictureInPictureMode,看看是否会有所改善。
    望采纳。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月29日
  • 提问应符合社区要求 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 vue3加ant-design-vue无法渲染出页面
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构