1.行为变更

1.1隐私权

1.1.1针对附近 Wi-Fi 设备的新运行时权限

Android 13 引入了 NEARBY_WIFI_DEVICES 运行时权限,该权限属于 NEARBY_DEVICES 权限组,适用于会管理设备与附近 Wi-Fi 接入点连接情况的应用。借助此权限,您可以更轻松地说明应用为何访问附近的 Wi-Fi 设备;在以前的 Android 版本中,这类应用则需要声明 ACCESS_FINE_LOCATION 权限。

如果您的应用以 Android 13 为目标平台并调用多个不同的 Wi-Fi API,则必须从用户处获得这项新权

注意:如果您的应用尝试在未获得适当权限的情况下调用 Wi-Fi API,则会发生 SecurityException。

1.1.2受影响的用例

这项新权限会影响几个不同的 Wi-Fi 用例,包括以下用例:

  • 查找或连接到附近的设备,如打印机或媒体投射设备。通过该工作流,您的应用可以完成以下类型的任务:

    • 通过带外方式(例如通过 BLE)接收 AP 信息。
    • 使用仅限本地使用的热点,通过 Wi-Fi 感知和连接功能发现并连接到设备。
    • 通过 Wi-Fi 直连发现和连接到设备。
  • 发起与已知 SSID(例如汽车或智能家居设备)的连接。
  • 开启仅限本地使用的热点。
  • 连接到附近的 Wi-Fi 感知设备。

1.1.3该权限属于“附近的设备”权限组

NEARBY_WIFI_DEVICES 权限是附近的设备权限组的一部分。此权限组在 Android 12(API 级别 31)中添加,还包含与蓝牙和超宽带相关的权限。如果您的应用请求此权限组中的多项权限,用户会看到一个运行时对话框,其中会请求用户批准您的应用访问附近的设备。在系统设置中,用户必须以组的形式启用和停用附近的设备权限;例如,针对给定应用,用户无法既停用其 Wi-Fi 访问权限,但又保持启用其蓝牙使用权限。

1.1.4坚定地声明您的应用不会推导物理位置

在以 Android 13 为目标平台时,请考虑您的应用是否会通过 Wi-Fi API 推导物理位置;如果不会,则应坚定声明此情况。如需做出此声明,请在应用的清单文件中将 usesPermissionFlags 属性设为 neverForLocation,如以下代码段所示。此过程类似于您声明绝不会将蓝牙设备信息用于获取位置信息时的过程:

<manifest ...><uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"android:usesPermissionFlags="neverForLocation" /><application ...>...</application>
</manifest>

1.1.5保持后向兼容性

由于 NEARBY_WIFI_DEVICES 权限仅适用于 Android 13 或更高版本,因此您应保留对 ACCESS_FINE_LOCATION 的所有声明,以便在您的应用中提供向后兼容性。不过,只要您坚定声明应用不会使用 Wi-Fi API 推导物理位置信息,就可以将此权限的最高 SDK 版本设为 32,如下以下代码段所示:

<manifest ...><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"android:maxSdkVersion="32" /><application ...>...</application>
</manifest>

1.1.6请注意,某些 API 仍需要位置信息权限

有几个 Wi-Fi API 仍然需要 ACCESS_FINE_LOCATION 权限才能获取位置信息,就像它们在 12L 及更低版本上的一样。示例包括 WifiManager 类中的以下方法:

  • getScanResults()
  • startScan()

1.1.7检查需要新权限的 API

如果您的应用以 Android 13 或更高版本为目标平台,您必须声明 NEARBY_WIFI_DEVICES 权限才能调用以下任何 Wi-Fi API:

  • WifiManager

    • startLocalOnlyHotspot()
  • WifiAwareManager
    • attach()
  • WifiAwareSession
    • publish()
    • subscribe()
  • WifiP2pManager
    • addLocalService()
    • connect()
    • createGroup()
    • discoverPeers()
    • discoverServices()
    • requestDeviceInfo()
    • requestGroupInfo()
    • requestPeers()
  • WifiRttManager
    • startRanging()

1.1.8Wi-Fi 访问工作流

图 1 显示了搭载 12L 或更低版本的设备上的 Wi-Fi 访问工作流。请注意对 ACCESS_FINE_LOCATION 权限的依赖。

图 1. 用于确定以 12L 或更低版本为目标平台的应用是否可以获取 Wi-Fi 信息的流程图。

图 2 显示了搭载 Android 13 或更高版本的设备上的 Wi-Fi 访问工作流(对于以 Android 13 或更高版本为目标平台的应用)。请注意,只要您声明应用不会根据 Wi-Fi 设备信息推导物理位置信息,就不再需要声明 ACCESS_FINE_LOCATION 权限:

图 2. 用于确定以 Android 13 或更高版本为目标平台的应用是否可以获取 Wi-Fi 信息的流程图。

1.2安全

1.2.1intent 过滤器会屏蔽不匹配的 intent

在现有实现中,“intent 过滤器”一词不合常理,因为它不会过滤传递给某个组件的 intent;而是仅在隐式 intent 的 intent 解析期间相关。当应用在其清单中注册某个导出的组件并添加 <intent-filter> 时,该组件可以由任何 intent 启动,即使那些 intent 与 intent 过滤器不匹配也可以。

启动组件时,如果不检查 intent,在某些情况下,这让外部应用能够触发本应属于应用内部的功能。

在此变更之前,可通过两种方法将 intent 传递给存在 intent 与所声明 <intent-filter> 元素不匹配情况的组件(例如 <activity>):

  1. 显式 intent:已设置组件名称的 intent;只要发送者有相应权限,这种 intent 始终会传递给相应组件。

  2. intent 选择器:当将匹配的 intent 设置为主 intent 的选择器时,系统将始终传递主 intent。

对于以 Android 13 或更高版本(即 intent 接收端)为目标平台的应用,当且仅当导出的组件与其声明的 <intent-filter> 元素相匹配时,系统才会将来自外部应用的所有 intent 传递给该组件。

不匹配的 intent 会被屏蔽。未强制执行 intent 匹配的例外情况包括:

  • 传送到未声明任何 intent 过滤器的组件中的 intent
  • 来自同一应用内、来自系统和来自根的 intent

2.功能和 API 概览

Android 13 面向开发者引入了一些出色的新功能和 API。以下几部分内容可帮助您了解适用于您的应用的功能并开始使用相关 API。

有关新增、修改和移除的 API 的详细列表,请参阅 API 差异报告。如需详细了解新的 API,请访问 Android API 参考文档 - 新 API 会突出显示以方便查看。此外,如需了解平台变更可能会在哪些方面影响您的应用,请务必查看会影响以 Android 13 为目标平台的应用和所有应用的 Android 13 行为变更。

2.1用户体验

2.1.1带主题的应用图标

   图 1:在 Android 13 中选择启用带主题的应用图标

从 Android 13 起,用户可以选择启用带主题的应用图标。借助此功能,用户可以调节受支持的 Android 启动器中应用图标的色调,以继承所选壁纸和其他主题的配色。

如需支持此功能,您的应用必须提供单色应用图标,并通过清单中的 <adaptive-icon> 元素指向该图标。如果用户在其设备上启用了带主题的图标切换开关,系统会使用用户所选壁纸和主题的配色来确定色调颜色,然后该颜色将用于单色应用图标。

规范

您的单色应用图标应符合以下规范:

  • 它应该是 VectorDrawable。
  • 我们建议该徽标适合 90x90 dp 容器中的 36x36 dp 的区域内。如果需要更大尺寸的徽标,最大可以为 60x60 dp。
  • 我们建议您使用平面徽标;如果您的徽标是三维的,那么您可以使用 Alpha 渐变。

大多数应用都可以重复使用用于通知的矢量可绘制对象。

以下示例展示了 Google 应用的单色应用图标,其中虚线表示徽标和容器区域之间的边界。此处显示的边界仅用于图示说明,其大小不可调整。

图 2:带主题的应用图标的测量值

1 容器区域 (90x90 dp)。

2 徽标区域(建议尺寸为 36x36 dp,最大尺寸为 60x60 dp)。

实现带主题的应用图标

将 monochrome android:drawable 属性添加到 <adaptive-icon> 元素中。例如,在 res/mipmap-anydpi-v26/ic_launcher.xml 中:

<adaptive-icon ><background android:drawable="..." /><foreground android:drawable="..." /><monochrome android:drawable="@drawable/myicon" />
</adaptive-icon>

在您的清单文件中,使用 android:icon 定义图标:

<application…android:icon="@mipmap/ic_launcher"…>
</application>

注意:如果清单中同时包含 android:roundIcon 和 android:icon,您必须移除对 android:roundIcon 的引用,或者在由 android:roundIcon 属性定义的可绘制对象中提供单色图标。

2.1.2Quick Settings Placement API

通过通知栏中的“快捷设置”,用户可无需离开应用上下文就能方便地更改设置或执行快速操作。对于提供自定义图块的应用,用户可以更轻松地发现图块并将其添加到“快捷设置”。借助新的图块放置 API,您的应用现在可以提示用户直接将自定义图块添加到一组有效的快捷设置图块中。借助新的系统对话框,用户只需一步即可不离开应用就添加图块,而不必转到“快捷设置”来添加图块。

2.1.3为多语言用户提供更好的支持

Android 13 引入了几项功能来改进多语言用户的应用体验,具体介绍请参阅以下几部分:

按应用设定的语言偏好设置

在许多情况下,多语言用户会将其系统语言设置为某一种语言(例如英语),但又想为特定应用选择其他语言(例如荷兰语、中文或印地语)。为了帮助应用为这些用户提供更好的体验,Android 13 引入了一些 API,它们使应用可在运行时设置在界面中显示不同语言。

使用自定义应用内语言选择器的应用可以使用这些新 API 来减少显示应用内语言选择器所需的样板代码量。为了支持旧版 Android 平台,我们将在即将发布的 Jetpack 库版本中添加类似的 API。

不支持多种语言的应用不受这些变更的影响。

如需了解详情,请参阅按应用设定的语言偏好设置页面。

Unicode 库更新

Android 13 添加了一些最新改进、修复和变更,均包含在 Unicode ICU 70、Unicode CLDR 40 和 Unicode 14.0 中。

以下是两项显著变更:

  • 英语(加拿大)en‑CA 和英语(菲律宾)en‑PH 在无可用的翻译资源时均使用英语(美国)en 翻译资源,而非英语(英国)en‑GB 翻译资源。
  • 针对西班牙语 es、意大利语 it、葡萄牙语 pt 和葡萄牙语(葡萄牙)pt‑PT 引入了 many 复数类别。与 CLDR v38 中引入的法语类似,此类别适用于大数目。

2.1.4更快断字

断字让分行的文本更易于阅读,并且有助于使界面更具自适应性。在 Android 13 中,我们将断字性能优化了多达 200%,因此您现在可以在 TextView 中启用断字功能,这几乎不影响渲染性能。如需启用更快断字功能,请在 setHyphenationFrequency() 中使用新的 fullFast 或 normalFast 频率。

2.2图形

2.2.可编程的着色器

改写自此 GLSL 着色器的 AGSL 动画着色器。

Android 13 添加了对可编程 RuntimeShader 对象的支持,其行为是使用 Android 图形着色语言 (AGSL) 定义的。AGSL 与 GLSL 共用大部分语法,但可用于 Android 渲染引擎中以自定义 Android 画布中的绘制行为以及过滤 View 内容。Android 在内部使用这些着色器来实现涟漪效果、模糊以及拉伸滚动,并且 Android 13 让您能为应用制作类似的高级效果。

2.3核心功能

OpenJDK 11 更新

Android 13 开始刷新 Android 的核心库,以与 OpenJDK 11 LTS 版本保持一致,并增添了适合应用和平台开发者的库更新和 Java 11 语言支持。Android 13 中引入的核心库变更还可以通过 Google Play 系统更新到 ART Mainline 模块,供 Android 12 设备使用。

Android 13 包含对核心库的以下更改:

  • 支持将 var 关键字用于局部变量,以及用作参数 lambda。
  • String 类中的新方法:

    • isBlank()
    • lines()
    • repeat()
    • strip()
    • stripLeading()
    • stripTrailing()
  • 支持 Collection.toArray(IntFunction),以便更轻松地使集合适应数组。

  • 支持 java.util 类 OptionalOptionalDoubleOptionalInt 和 OptionalLong 中的 ifPresentOrElse()isEmpty()orElseThrow() 和 stream()

  • 扩展了对 SocketOptions 的支持,包括重复使用套接字。

  • NullReaderNullWriterInputStreamOutputStream 和 transferTo()Reader 功能,用于将读取的字符传输给 Writer

  • 添加了使用 Charsets 进行网址编码和解码的功能。

  • 适用于 FileReaderFileWriterPrintStream 和 PrintWriter 的 Charset 功能。

  • 为 ByteArrayInput 或 OutputStream 以及 Input 或 OutputStream 新增了 transferTo()readNBytes()readAllBytes() 和 writeBytes() 函数。

  • 对 java.lang.invoke.VarHandle 的运行时和编译器支持。

  • 在内部使用 VarHandle 将 java.util.concurrent 更新到 OpenJDK 11 API。

Java 和 OpenJDK 是 Oracle 及/或其关联公司的商标或注册商标。

Android 13 开发者预览版相关推荐

  1. vivo云测平台上线Android 13开发者预览版通知

    vivo将计划在本月上线多部vivo新机.其中包括Android 13开发者预览版(国内和海外版).届时上周四率先上线了vivo x80/x80 pro天玑版本.基于Android 12 详细信息请见 ...

  2. 欢迎体验 | Android 13 开发者预览版 2

    作者 / Dave Burke, VP of Engineering 上个月,我们 发布了 Android 13 的首个开发者预览版.Android 13 围绕我们的核心主题打造,即隐私和安全.开发者 ...

  3. android p preview_细数 Android P 开发者预览版中最不能错过的新特性

    原标题:细数 Android P 开发者预览版中最不能错过的新特性 2018年安卓巴士全球开发者论坛-重庆站 [线下活动]春天到了 跟小编一起去重庆嗨皮吧~ Android P 应用适配新特性1.Pr ...

  4. Android N开发者预览版(第二版)发布

    上个月,我们发布了首个Android N的开发者预览版,本文将带你先睹为快,一窥新发布的Android N开发者预览版第二版.大家的反馈帮助我们找出了很多bug,再对功能做出改进并修复一些bug后,我 ...

  5. Android Wear开发者预览版入门

    Android Wear开发者预览版包括工具和API,增强了应用程序通知功能,提供针对Android可穿戴设备的最佳用户体验. 利用Android Wear开发者预览,你可以: 在Android模拟器 ...

  6. android应用窗口模式,[技巧]如何启用Android N开发者预览版中的“自由窗口”模式...

    这里是Android N开发者预览版"自有窗口"模式的一些实际演示截图. 对于已经参加了"Beta Program"的人们来说,通过OTA获取Android N ...

  7. Android P 开发者预览版

    Android P 开发者预览版首发! 在上周的世界移动通信大会 (Mobile World Congress) 上,我们看到由开发者.设备厂商以及芯片合作伙伴组成的 Android 生态系统不断为全 ...

  8. 罗永浩宣布进军电商直播;微博回应用户数据泄露;Android 11 开发者预览版 2 发布 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自视觉中国 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦, ...

  9. Android Wear 开发者预览版安装

    今天google发布了Android Wear 平台,借助该平台,开发者可以将Android移植到可穿戴设备上.Android Wear的SDK还没有发布,想尝鲜的开发者可以试用 [Android W ...

最新文章

  1. python多线程_【python多线程02】各种线程锁
  2. VTK:标量条形 Actor用法实战
  3. imageloader 的 java.security.cert.CertPathValidatorException
  4. 在 .NET 6 中使用 DATEONLY 和 TIMEONLY
  5. php类同时调用两个参数,如何让一个类选择器同时调用两个class值_html/css_WEB-ITnose...
  6. IOT---(4)物联网平台架构设计
  7. 云计算具有什么平台_如何搭建自己的云计算平台?
  8. 同一html页面手机pc不同显示,Nginx根据手机端与电脑端设备相同地址显示不同页面内容...
  9. mysql中set和enum使用(简单介绍)
  10. 计算机编辑文档教程,腾讯TIM在线文档编辑功能使用方法教程
  11. PS批量处理_将图片批量转为jpg
  12. idcsystem源码php_最新PHP宝塔IDC分销系统源码
  13. Android WebView下载apk
  14. 【异构图->精读】Heterogeneous Graph Attention Network
  15. matlab中plot画图的颜色线型
  16. Java学习路线全过程(包含视频及图书资源)
  17. 居家办公远程控制电脑怎么操作
  18. 基于ArcGIS水文分析、HEC-RAS模拟技术在洪水危险性及风险评估
  19. 个人计算机是国产芯片,全球最纯国产PC诞生!所有芯片/系统都是国产
  20. Java(web)项目安全漏洞及解决方式【面试+工作】

热门文章

  1. index.php文件下载,此文件时入口文件index.php,_PHP教程
  2. 全球手机一哥再度回归国内市场,国产手机品牌怕了么?
  3. 中国工业机器视觉应用领域9家新晋企业名单
  4. python量化实战 顾比倒数线_最精确的动态顾比倒数线(最后修正)
  5. c 语言500行小游戏代码,500行代码使用python写个微信小游戏飞机大战游戏.pdf
  6. 智能空调安卓APP远程控制空调开关和温度(TCP/IP协议)
  7. Codeforces Round #827 (Div. 4)(A~G)(F已更新)
  8. 无聊时就用Python搞个游戏玩玩【附源码】
  9. 三星手机没有电了,自动关机,充不进电的解决方法。
  10. Windows关机过程分析与快速关机