Android P 为用户和开发人员引入了强大的新功能和新的用户接口,本文档将重点介绍这些新功能和新的用户接口。
- 使用Wi-Fi RTT进行室内定位
- 支持显示切割
- 通知增强
- 多相机支持和相机更新
- ImageDecoder用于位图和绘图
- 动画
- HDR VP9视频,HEIF图像压缩和媒体API
- Job Scheduler中的数据流量管理
- 神经网络API 1.1
- 自动填充框架
- 安全增强
- 无障碍
- 导航
- 旋转屏幕
Android P 增加了对IEEE 802.11mc Wi-Fi协议 ( 也称为 Wi-Fi 往返时间协议 RTT :Wi-Fi Round-Trip-Time ) 的支持,让您可以利用应用程序进行室内定位。
在支持Android P 的硬件设备上,您的应用可以使用新的RTT API来测量与附近支持 RTT的 Wi-Fi 接入点(AP)的距离。设备必须启用位置并启用Wi-Fi扫描(在设置>位置下),并且您的应用必须具有ACCESS_FINE_LOCATION 的权限。设备不需要连接到接入点来使用 RTT。为了保护使用者的隐私,手机能够确定到 AP 的距离,但AP不会记录用户的信息。
如果您的设备检测到3个或更多有效的AP,则可以使用多点定位算法来估算最适合这些测量值的设备位置。其结果通常精确到1至2米范围内。
通过这种准确性,您可以构建出新的特性,如室内导航,基于位置的细微服务,如消除歧义的语音控制(例如,“打开这个灯”)和基于位置的信息(如“此产品是否存在的特别优惠?”)。
Android P 支持最新的边缘到边缘( edge-to-edge )屏幕,并为原来相机和扬声器区域提供显示屏,。要确定这些切割区域的存在的位置,请使用getDisplayCutout() 方法新的窗口布局属性 layoutInDisplayCutoutMode允许您的应用程序将其内容布置在设备的切口周围。您可以将此属性设置为以下值之一:
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
您可以在运行Android P的任何设备或模拟器上模拟屏幕截图,如下所示:
- 启用开发者选项。
- 在开发人员选项屏幕中,向下滚动到绘图部分,然后选择模拟带有剪切的显示。
- 选择切口的大小。
注意:我们建议您使用运行Android P的设备或模拟器测试切割区域的内容显示
Android P 引入了多项对通知的增强功能,所有这些功能都可供 Android P 及更高版本的开发人员使用。
增强的信息体验
从Android 7.0(API级别24)开始,您可以添加一个操作来回复邮件或直接从通知中输入其他文本。Android P通过以下方式增强了此功能:
- 支持图像:Android P 现在可以在手机上的消息通知中显示图像,您可以使用
setData()
在消息上显示图像。 - 会话参与者的简化支持:新
Notification.Person
类用于识别参与对话的人员,包括他们的虚拟形象和URI。许多其他的API,比如addMessage()
现在利用这个Person
类而不是CharSequence
。 - 将答复另存为草稿:
EXTRA_REMOTE_INPUT_DRAFT
当用户无意中关闭消息通知时,您的应用可以检索系统中未发送的答复 。您可以使用此额外功能预先填充应用中的文本字段,以便用户完成回复。 - 确定对话是否是群组对话:您可以
setGroupConversation()
用来有目的地将对话标识为群组对话或非群组对话。 - 为意图设置动作:
setSemanticAction()
方法允许您为动作提供语义含义,如标记为读取,删除,回复等。 - SmartReply:Android P 用
RemoteInput.setChoices()
向用户提供一系列标准响应,用来支持快捷回复。
频道设置,广播和免打扰
Android O 引入了Notification Channels, 可让您为要每种类型的通知创建一个用户可自定义的频道。Android P 通过以下更改简化了通知渠道设置:
- 阻止频道组:用户现在可以在应用的通知设置中阻止整组频道。您可以使用该
isBlocked()
方法来确定某个组何时被阻止,不发送该组中频道的任何通知。此外,您的应用可以使用新getNotificationChannelGroup()
方法查询当前频道组设置 。 - 新的广播意图类型:Android系统现在在通知频道和频道组的阻塞状态发生变化时发送广播意图。拥有被阻止的频道或群组的应用可以监听这些意图并作出相应的反应。有关这些意图操作和额外信息的更多信息,请参阅参考中更新的常量列表
NotificationManager
。有关对广播意图作出反应的信息,请参阅 广播。 - 新的免打扰优先级类别:
NotificationManager.Policy
有两个新的策略常量:(PRIORITY_CATEGORY_ALARMS
警报优先)和PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER
(媒体,系统和游戏声音优先)。
现在,您可以从运行Android P的设备上的两个或更多物理摄像头同时访问流。在具有双前置或双后置摄像头的设备上,您可以创建无法使用单个摄像头实现的创新功能,例如无缝缩放,散景,和立体视觉。该API还允许您调用逻辑或融合的相机流,以便在两台或更多台相机之间自动切换。
相机的其他改进包括新的会话参数有助于减少初始捕捉期间的延迟,而Surface共享可让相机客户端处理各种使用情况,而无需停止和启动相机流式传输。我们还添加了基于显示器的闪光灯支持的 API 以及访问应用程序级图像稳定和特殊效果的OIS时间戳。
Android P还支持支持deveices上的外部USB / UVC相机。
Android P引入 ImageDecoder
了用于解码图像的新方法。您应该使用 ImageDecoder
解码图像而不是BitmapFactory
和 BitmapFactory.Options
API。
ImageDecoder
可以让你创建一个Drawable
或一个 Bitmap
字节缓冲区,一个文件或一个URI。要解码图像,首先调用createSource()
编码图像的来源。然后,通过调用 decodeBitmap()
或 decodeDrawable()
传递ImageDecoder.Source
对象来创建一个 Bitmap
或一个 Drawable
。要更改默认设置,请传递OnHeaderDecodedListener
给 decodeBitmap()
或decodeDrawable()
。ImageDecoder
调用onHeaderDecoded()
图像获取默认宽度和高度。如果编码图像是动画GIF或WebP,则 decodeDrawable()
返回Drawable
,(它是AnimatedImageDrawable
类的一个实例)
您可以使用不同的方法来设置图像属性。这些包括:
- 要将解码图像缩放到确切的大小,请调用
setResize()
设置目标尺寸。您还可以使用样本大小缩放图像。直接传递样本大小setResize()
,或者调用getSampledSize()
找出ImageDecoder
最有效的样本。 - 要在缩放的图像范围内裁剪图像,请调用
setCrop()
。 - 创建一个可变的
Bitmap
可调用
setMutable
(true)
。
ImageDecoder
还可以让您为图像添加自定义和复杂的效果,如圆角或圆圈蒙版。setPostProcessor()
与PostProcessor
类的一个实例一起使用来执行所需的任何绘图命令。
Android P引入了一个新 AnimatedImageDrawable
类来绘制和显示GIF和WebP动画图像。 AnimatedImageDrawable
与AnimatedVectorDrawable类似 ,RenderThread驱动动画AnimatedImageDrawable
。RenderThread 使用工作线程进行解码,因此解码不会干扰RenderThread。此实现允许您的应用拥有动画图像,而无需管理其更新或干扰应用的UI线程。
一个AnimagedImageDrawable
可以用新的ImageDecoder解码 。以下代码片段显示了如何使用ImageDecoder
来解码AnimatedImageDrawable
:
Drawable d = ImageDecoder.decodeDrawable(...); if (d instanceof AnimatedImageDrawable) { ((AnimatedImageDrawable) d).start(); // Prior to start(), the first frame is displayed }
ImageDecoder
有几种方法可以让你进一步修改图像。例如,您可以使用 setPostProcessor()
方法来修改图像的外观,例如应用圆形蒙版或四舍五入的角。
Android P 增加了对高动态范围(HDR)VP9 Profile 2的内置支持,因此您现在可以通过YouTube,Play电影和其他支持HDR的设备向用户提供支持HDR的电影。
Android P 增加了对 HEIF(heic)图像编码支持,以节省存储和网络数据(使用MediaMuxer
和MediaExtractor
类)。借助Android P 设备上的平台支持,您可以轻松发送和利用来自后端服务器的HEIF图像。一旦确定您的应用程序与此数据格式兼容以供共享和显示,请在您的应用程序中尝试使用HEIF格式存储图像。您可以使用ImageDecoder 或 BitmapFactory 执行 jpeg-to-heic 转换。
Android P 还增加了MediaPlayer2
,该播放器支持使用的播放列表DataSourceDesc
。创建一个MediaPlayer2
使用实例MediaPlayer2.create()
。
Media metrics 现在也可从AudioTrack
,AudioRecord
和MediaDrm
类。
Android P为MediaDRM
课程添加了新的方法来 获取指标,HDCP级别,安全级别和会话数量,并为安全级别和安全停靠添加更多控制。有关详细信息,请参阅API差异报告。
Android P 的 JobScheduler
已得到改进,可以更好地为用户处理与网络相关的作业,并与运营商分别提供的网络状态信号协调工作。
任务现在可以声明其估计的数据大小,预取信号,并指定详细的网络要求 - 运营商可以将网络报告为拥塞 或未计量。JobScheduler
然后根据网络状态管理工作。例如,当网络拥塞时, JobScheduler
可能推迟大型网络请求。在未计量的网络上时,JobScheduler
可以运行预取作业以改善用户体验,例如通过预取标题。
添加任务时,请确保使用setEstimatedNetworkBytes()
, setIsPrefetch()
并setRequiredNetwork()
在适当时帮助JobScheduler
正确处理任务。执行任务时,请务必使用Network
返回的对象 JobParameters.getNetwork()
。否则,您将隐式使用设备的默认网络,这可能不符合您的要求,导致意外的数据使用情况。
Neural Networks API在Android 8.1(API等级27)中引入,可加速Android上的设备上机器学习。Android P 扩展并改进了API,增加了对九种新操作的支持 - Pad,BatchToSpaceND,SpaceToBatchND,Transpose,Stripped Slice,Mean,Div,Sub和Squeeze。
Android 8.0(API级别26)引入了自动填充框架,这使得在应用中填写表单变得更加容易。Android P 引入了自动填充服务可以实现的多项改进,以在填写表单时进一步增强用户体验。有关更多详细信息,请参阅自动填充框架页面。
Android P引入了许多新的安全功能,包括统一的指纹验证对话框和敏感交易的高保证用户确认。有关更多详细信息,请参阅 安全更新页面。
Android备份的客户端加密
Android P 支持使用客户端秘密对Android备份进行加密。由于此隐私措施,需要设备的 PIN 模式或密码才能从用户设备备份的数据中恢复数据。要详细了解此新功能背后的技术,请参阅 Google Cloud Key Vault Service 白皮书。
要了解有关在Android设备上备份数据的更多信息,请参阅 数据备份概述。
Android P引入了一些操作,属性和方法,以便您更轻松地使用辅助功能框架,以增强用户的辅助功能。
要详细了解如何使您的应用更易于访问并构建辅助功能服务,请参阅辅助功能。
我们添加了新的属性,您可以使用这些属性来改善从屏幕一部分到另一部分的导航。您可以使用这些属性来帮助用户在应用中浏览文本,并快速将用户带到应用界面的特定部分。
例如,在购物应用程序中,屏幕阅读器可以将用户直接从一个交易类别导航到下一个类别,而无需移动这些类别中的每个项目。
辅助功能窗格标题
在Android P之前,无障碍服务无法轻易确定屏幕的特定部分何时更新,例如片段转换期间。
在Android P中,部分现在有称为可访问性窗格标题的标题。辅助功能服务可以接收对这些标题的更改,使他们能够提供有关已更改内容的更详细信息。
要指定节的标题,请使用新 android:accessibilityPaneTitle
属性。您还可以更新在运行时使用的UI部分的标题setAccessibilityPaneTitle()
。例如,您可以为Fragment
对象的内容区域提供标题 。
基于标题的导航
如果您的应用显示包含逻辑标题的内容,请将新 android:accessibilityHeading
属性设置true
为View
代表这些标题的实例 。这允许用户从一个标题导航到下一个标题。当用户与屏幕阅读器交互时,此导航过程特别方便。
组导航和输出
屏幕阅读器传统上使用该 android:focusable
属性来确定屏幕的哪些部分应该被读取为单位。有时,这些屏幕阅读器需要将多个View
对象的内容指定 为一个单元。这样,用户就可以理解这些视图在逻辑上相互关联。
在Android P之前,您需要将每个内部View
对象标记为不可聚焦,并将包含它们的组标记 为可聚焦。这种安排导致一些View
标记为焦点的事件使键盘导航变得更加麻烦。
在Android P中,在使对象可聚焦的副作用不理想的情况下,您可以使用新 android:screenReaderFocusable
属性代替android:focusable
属性View
。屏幕阅读器应该关注所有已设置android:screenReaderFocusable
或android:focusable
要设置的元素true
。
便利行动
Android P支持代表用户执行便捷操作:
- 与工具提示互动
- 辅助功能框架中的新功能使您可以访问 应用界面中的工具提示。使用
getTooltipText()
阅读工具提示的文本,并使用新的ACTION_SHOW_TOOLTIP
和ACTION_HIDE_TOOLTIP
指示的情况下,View
可以显示或隐藏自己的工具提示。 - 新的全局动作
- Android P
AccessibilityService
中引入了对两个新设备操作的支持 。现在,您的服务可以分别帮助用户锁定设备并使用GLOBAL_ACTION_LOCK_SCREEN
和GLOBAL_ACTION_TAKE_SCREENSHOT
操作截取屏幕截图 。
窗口更改细节
当应用程序同时重绘多个窗口时,Android P可以更轻松地跟踪应用程序窗口的更新。当一个 TYPE_WINDOWS_CHANGED
事件发生时,可以使用 getWindowChanges()
API来确定如何在Windows已经改变。在多窗口更新期间,每个窗口现在都会生成自己的一组事件。该getSource()
方法返回与每个事件关联的窗口的根视图。
如果应用程序为其 对象定义了可访问性窗格标题View
,则您的服务可以识别应用程序的UI何时更新。当一个TYPE_WINDOW_STATE_CHANGED
事件发生时,使用由返回的新类型 getContentChangeTypes()
,以确定如何在窗口发生了变化。例如,框架现在可以检测窗格何时具有新标题或窗格何时消失。
为了消除无意的旋转,我们添加了一种新的模式,即使设备位置发生变化,也会固定当前的方向。通过按系统栏中的新按钮,用户可以在需要时手动触发旋转。
在大多数情况下,应用程序的兼容性影响应该非常小。但是,如果您的应用具有任何自定义旋转行为或使用任何深奥的屏幕方向设置,则可能会遇到在用户旋转首选项始终设置为纵向之前可能未被注意的问题。我们鼓励您查看应用的所有关键活动中的轮换行为,并确保所有屏幕方向设置仍提供最佳体验。
有关更多详细信息,请参阅关联的 行为更改。
注:新的旋转模式可让用户在需要时使用系统栏中的按钮手动触发旋转。
版权所有丨如未注明,均为原创,转载请注明转自:https://whonee.net/android-p-features-and-apis.html
感谢博主分享
欢迎常来逛逛!
近来好多都在谈论这个P的事,越来越跟水果系统靠了,也越来越像黑莓系统一样用手势了。
PS:你的文章的目录化,这个是插件还是嘛?!
完全手打的,手写代码的。
android P 我们还没开始做,这个也是翻译的google官方的介绍,最近还在搞8.1的。
另外,你网站也接广告了?!
一直有广告,用的google联盟的!
ImageDecoder这个类一直提示找不到。。。sdk下了,sdk-tool也按官方说的下了最新的
参考下:https://developer.android.com/reference/android/graphics/ImageDecoder 关于这个类的说明,看下引入是不是正确。