Android 8.0 Oreo的画中画模式学习

本文主要是对谷歌开发者官方微信公众号发布的Android 8.0 Oreo 画中画模式一文的学习记录。 

画中画模式Picture-in-picture(PIP)简介

在Android 8.0(API Level 26)中,Activity可以启动画中画 Picture-in-picture(PIP)模式。PIP 是一种特殊类型的多窗口模式,常见于视频播放场景。Activity处于画中画模式时,是处于暂停状态的(onPause),但仍然可以继续展示内容,所以app不能在onPause()中停止播放,而应该在onStop()中停止,在onStart()中启动播放。

声明Activity支持画中画

从 Android 8.0(API 级别 26)开始,声明Activity支持PIP非常简单。只需在Manifest.xml中将Activity的supportsPictureInPicture标志置为true,不需要设置android:resizeableActivity为true,只有在声明Activity支持多窗口模式时,才需要设置android:resizeableActivity为true。

<activity android:name=".MainActivity"...android:supportsPictureInPicture="true" />
  • 如何进入画中画模式
public boolean enterPictureInPictureMode(PictureInPictureParams params)
  • PictureInPictureParams 的创建方式:
private void enterPIP() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {Icon icon = Icon.createWithResource(MainActivity.this, R.drawable.ic_pause_24dp);PendingIntent intent = PendingIntent.getBroadcast(MainActivity.this,REQUEST_PAUSE,new Intent(ACTION_MEDIA_CONTROL).putExtra(EXTRA_CONTROL_TYPE, CONTROL_TYPE_PAUSE),0);ArrayList<RemoteAction> actions = new ArrayList<>();actions.add(new RemoteAction(icon, "PIP", "PIP", intent));PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();builder.setActions(actions);enterPictureInPictureMode(builder.build());}
}
  • 注意

如果只是配置了android:supportsPictureInPicture="true",然后就在代码中进入画中画模式,我们可能会遇到:页面被销毁后重新启动并进入pause状态。现象就是:窗口是缩小了,但是视频却可能是重新开始播放的,这显然不是我们想要的。其生命周期变化如下:

onResume()onResume()onPause()onPause()onStop()onStop()onDestroy()onDestroy()onCreate()onCreate()onStart()onStart()触发进入PIP模式

这是因为,进入画中画模式,页面的纵横比可能发生了变化(尤其是应用全屏时是竖屏的状态),系统会以为页面从竖屏进入横屏模式,导致页面被销毁重新创建。 
处理方法就是在Manifest的Activity节点下添加android:configChanges配置,告诉系统哪些配置变化由app自己处理而不用重启页面,并按需要在onConfigurationChanged回调中进行相应处理。

<activity android:name=".MainActivity"...android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"android:supportsPictureInPicture="true" />

画中画模式和全屏的转换

页面在进入画中画模式或恢复全屏时,我们可能有一些页面的显示细节要对应处理,这些处理可能放到Activity的onPictureInPictureModeChanged ( )的回调方法中

Android 8.0 学习(21)---Oreo的画中画模式学习相关推荐

  1. 【高通SDM660平台 Android 10.0】(21) --- 高通Camera persist使用手册

    在网上看到一位兄弟针对高通平台 camera 相关属性总结的特别好,特意转载过来备份下,以供后续调试使用. 原文: <高通Camera persist使用手册> 基于MSM8996平台PL ...

  2. ARM学习(3) 异常模式学习(CortexR5)

    笔者简单介绍一下ARM CortexR5异常模式 学习 1.由来 笔者工作中用到了SSD的主控芯片是基于CortexR5系列的,所以研究一下CortexR5系列的一些异常模型. 什么时候会用到这些异常 ...

  3. 【高通SDM660平台 Android 10.0】(17) --- ISP算法相关-待学习文章

    <精 高通camera结构(摄像头基础介绍)> <Android : Camera2/HAL3 框架分析> 待学习: <基于IC设计的实用ISP介绍> <IS ...

  4. Android 4.0.3 联系人(通讯录)应用源码学习

    Contacts应用入口类有2个:PeopleActivity.java和DialtactsActivity.java.PeopleActivity是联系人入口类,DialtactsActivity是 ...

  5. android地图模式,百度地图Android V2.0新增卫星图及3D模式功能

    近日,百度地图Android版V2.0正式对外发布.本次升级引入了全新引擎.全新数据并采用全新界面,因此这个版本被称为全新跨代版.它不仅为用户打造更加优质精准的地图检索及浏览感受,同时还有效节省使用地 ...

  6. Android 8.0 系统中添加护眼模式

    前言 现在市面上的手机一般都带有护眼模式,因此这里自己在系统里面添加这样一个功能 功能分析 系统的护眼模式,应该是默认关闭,用户可以在设置中操作,用户打开之后如果没有关闭会一直存在的,并且在所有视图之 ...

  7. android怎么加载3d地图,百度地图Android V2.0新增卫星图及3D模式功能

    近日,百度地图Android版V2.0正式对外发布.本次升级引入了全新引擎.全新数据并采用全新界面,因此这个版本被称为全新跨代版.它不仅为用户打造更加优质精准的地图检索及浏览感受,同时还有效节省使用地 ...

  8. Android 10.0 开启和关闭护眼模式

    1.概述 在10.0系统的产品定制化中,由于一些定制化开发设备中,需要护眼模式,而护眼模式功能开启和关闭 也需要提供接口供app调用,这就需要在系统api中自定义的服务中,提供开启关闭护眼模式的接口, ...

  9. Android 7.0 Nougat(牛轧糖)---对开发者来说

    Android 7.0出来了.让你的app准备迎接最新的android版本吧,支持节省电量和内存,这样新的系统行为.使用多窗口UI.直接恢复通知以及其他操作来扩展你的app. android 7.0介 ...

最新文章

  1. Java基础之Comparable接口和Comparator接口的比较
  2. 「头条推荐技术解析一」运营和业务模式详解
  3. 外媒:巴基斯坦将成为南亚地区首个测试5G通讯的国家
  4. PHP程序员7小时学会Kotlin 第二小时
  5. ubuntu mysql5.5编码_Ubuntu下MySQL5.5编码设置
  6. pthread_cond_timedwait函数使用
  7. Win10卸载KB5014699补丁教程
  8. 自媒体人不做广告怎么吃饭
  9. CCF期刊阅读18.1--城市计算和智能
  10. 01入门及简单应用-ReentrantReadWriteLock原理-AQS-并发编程(Java)
  11. ubuntu 16.04 安装anaconda tensorflow opencv keras openslide-python pycharm
  12. 张艾迪(创始人):工作23小时
  13. 软件设计与体系结构简答题汇总
  14. 整机压力测试_app的压力测试怎么做呢?
  15. 凌汛 php,黄河全线开河 安度2020—2021年度凌汛期
  16. Java开发者XML基础(一)
  17. IsoBuster Pro复制加密光盘(内容隐藏光盘)
  18. python 西门子触摸屏通讯_实例讲解博途编程实现S7300与西门子触摸屏通讯
  19. 国嵌C语言总结(1-5)
  20. 还在找Mac版本的音乐合成器吗?看这里~

热门文章

  1. c语言编程 排序,C语言编程-9_3 排序
  2. mysql中语句块当事务,MySQL事务与隔离级别
  3. Java面试之线程池详细
  4. Sqoop-MySQL导入hive时id为文本解决
  5. BZOJ3495 PA2010 Riddle 【2-sat】
  6. 基于《河北省重大技术需求征集系统》的可用性和可修改性战术分析
  7. Algorithms - Insertion Sort - 插入排序
  8. 机器学习之Adaboost (自适应增强)算法
  9. 13.1.DataGrid的增、删、改、查前台页面
  10. 导出数据库报错 EXP-00002: 写入导出文件时出错 EXP-00000: 导出终止失败