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

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 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化