Android系统开发(十一):屏幕设置的“七宗最”,从快捷方式到分屏画中画

引言

欢迎来到本期技术博客,我们的主题是 Android 屏幕设置背后的 AOSP 实现。你是否曾好奇,手机上的快捷方式是如何精准“落地”的?圆形启动器图标为什么不再方?DND 模式真的能让“键盘侠”沉默?或者画中画模式是怎么让观影和社交两不误的?选择这个主题,是因为这些屏幕功能看似简单,却是 Android 系统工程师智慧的结晶,也是手机用户体验优化的关键环节。阅读本文,你将开启一个关于屏幕设置的奇幻技术之旅,让“科技向上”不再是冷冰冰的口号!
在这里插入图片描述


一、技术

屏幕设置可以说是 Android 系统中的“表面功夫”,但它的背后是无数代码支撑的深层机制。AOSP(Android Open Source Project)提供了这些功能的基础框架,从启动器图标到多窗口模式、从 HDR 支持到零售演示模式,涵盖了用户体验的方方面面。让我们透过幽默的“放大镜”,去看清那些看似平凡的按钮,如何实现了“手机大脑”的强大与智能。


二、定义

这些屏幕功能的核心在于 Android FrameworkSystemUI 的协同工作。快捷方式依赖于 ShortcutManager;圆形图标的绘制遵循 Material Design;多窗口模式基于 ActivityManager 的窗口管理器设计;HDR 则需要硬件支持和 MediaCodec 解码的配合。简单来说,这些功能不仅是代码层的实现,更是 Android 系统架构和硬件能力结合的结果。


三、调试

环境和工具:
  • 操作系统:Ubuntu 20.04
  • 开发工具:Android Studio + AOSP 源码
  • 硬件需求:支持 HDR 的测试设备
  • 前置条件:配置完整的 Android 编译环境,了解基本的 Framework 架构
  1. 快捷方式的实现

    • 修改 ShortcutManager,在 res/xml 文件中添加快捷方式元数据。
    • 示例代码:
      <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
          <shortcut
              android:shortcutId="id1"
              android:enabled="true"
              android:icon="@drawable/ic_shortcut"
              android:shortcutShortLabel="Short 1"
              android:shortcutLongLabel="Shortcut 1">
              <intent android:action="android.intent.action.VIEW"
                  android:targetPackage="com.example"
                  android:targetClass="com.example.MyActivity" />
          </shortcut>
      </shortcuts>
      
  2. 圆形图标设计

    • 修改 Launcher 中图标加载逻辑。
    • 使用 BitmapShader 创建圆形图标。
  3. 画中画模式

    • 配置 AndroidManifest.xml
      <activity
          android:name=".MyActivity"
          android:resizeableActivity="true"
          android:supportsPictureInPicture="true">
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
          </intent-filter>
      </activity>
      
    • 调用 enterPictureInPictureMode() 启动。

四、项目实例

以下是三个详细的 Android 屏幕设置相关的项目案例。我们将从功能描述、实现过程、关键代码、以及最终效果出发,帮助你深度理解这些技术的实现细节。


案例 1:多窗口模式的视频播放 App

功能描述:
  • 支持分屏模式,让用户可以同时运行多个 App。
  • 支持画中画模式,用户可以缩小视频窗口,并执行其他操作。
  • 在视频播放过程中,动态调整窗口大小以保持用户体验。
实现过程:
  1. 配置项目环境

    • 创建一个新项目,配置 minSdkVersion 为 24(分屏)或 26(画中画模式)。
    • AndroidManifest.xml 中设置 resizeableActivitysupportsPictureInPicture
  2. 分屏模式实现

    • 确保 Activity 能在分屏模式下运行:
      <activity
          android:name=".VideoPlayerActivity"
          android:resizeableActivity="true"
          android:supportsPictureInPicture="true">
          <intent-filter>
              <action android:name="android.intent.action.VIEW" />
          </intent-filter>
      </activity>
      
  3. 画中画模式实现

    • 定义一个方法触发画中画模式:
      fun enablePipMode() {
             
             
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
             
             
              val pipParams = PictureInPictureParams.Builder()
                  .setAspectRatio(Rational(16, 9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值