原文地址:http://developer.android.com/preview/api-overview.html
Tips: 翻译只为熟悉这些API,英文很烂,如果内容翻译有误,影响到了你,请谅解。
---------------------------------
M 开发者预览版给你提供了一个提前看看即将发布的android平添。它为用户和开发者提供了一些新的功能。本文档介绍了最值得注意的API。
M 开发者预览版的目的是为了 developer early adopters and testers。如果你有兴趣牵动Android框架的方向。试一下M 开发者预览版,并告诉我们你的反馈。
注意: 不要发布使用M开发者预览版的应用到Google Play。
注: 本文档通常指的类和方法还没有提供 在developer.android.com提供参考资料。本文档的这些代码样式的API元素(没有超链接).对于这些元素的初步API文档,下载预览参考。
重要行为的改变(Important behavior changes)
如果你之前已经发布过Android的应用,要知道你的应用可能会受到平台变化的影响。
请查看完整信息的 Behavior Changes .
应用程序的链接(App Linking)
这个预览版通过提供更强大的应用程序链接增强了Android的意图系统(intent system)。 这个功能允许你把应用程序与你拥有的域名相关联。 基于此关联,该平台可以限定默认的应用程序来处理特定网站的链接,并跳过用户选择一个应用程序。
要了解怎么实现此功能,请阅读 App Linking.
应用程序的自动备份(Auto Backup for Apps)
系统现在自动执行完整的数据备份和恢复应用程序. 这个行为被默认为目标为M的预览版应用程序启动; 你不需要添加任何额外的代码. 如果用户删除了google账号,他的备份数据也会被删除.
要了解此功能如何工作和怎么配置备份文件系统, 请阅读 Auto Backup for Apps.
认证(Authentication)
这个预览版提供了新的API,让你在可支持的设备上通过他们的指纹扫描来验证用户身份, 并检查用户最近最后一次使用解锁机制(如锁屏密码).
在Android Keystore system 使用这些API.
指纹认证(Fingerprint Authentication)
为了通过指纹扫描来验证用户身份, 获取 newandroid.hardware.fingerprint.FingerprintManager类的实力并调用
FingerprintManager.authenticate()
方法. 你的应用程序必须运行在一个与指纹传感器兼容的设备上. 你必须在你的应用上实现指纹认证流程的用户界面, 并在你的UI上实现标准的Android指纹图标. Android的指纹图标(c_fp_40px.png
) 包含在示例应用程序 sample app. 如果你正在开发使用指纹认证的多个应用程序, 请注意,每个应用程序必须独立验证用户的指纹.
为了使用此功能,首先在你的清单文件添加 USE_FINGERPRINT
权限.
<uses-permission android:name="android.permission.USE_FINGERPRINT" />

要查看一个实现了指纹认证的应用,请参阅 Fingerprint Dialog sample.
如果你正在测试此功能,请按照依稀步骤操作:
- 安装 Android SDK Tools Revision 24.3,如果你还没有安装。
- 加入一个新的指纹,通过 Settings > Security > Fingerprint, 然后,按照说明操作。
- 是用模拟器来模拟指纹触摸事件,通过下面的命令.使用相同命令来模拟在锁屏上或你的app的指纹触摸事件。
adb -e emu finger touch <finger_id>
On Windows, you may have to run
telnet 127.0.0.1 <emulator-id>
followed byfinger touch <finger_id>
.
确认凭证(Confirm Credentials)
你的app可以根据他们最近如何解锁他们的设备来验证用户身份。此功能免去了用户不得不记住额外的应用程序专用密码,并避免了为你实现自己的身份验证的用户界面的需求.你的应用应该结合公钥/私钥来使用该功能实现用户身份验证。
设置一个超时时间,相同的key可以被重用,在用户已经认证成功后, 调用 newandroid.security.keystore.KeyGenParameterSpec.setUserAuthenticationValidityDurationSeconds()方法,当你设置
KeyGenerator
or KeyPairGenerator后
. 该功能目前适用于对称加密操作。
避免过度的使用重新认证对话框 -- 你的应用应该首先尝试使用加密的对象 ,如果超时过期,使用 createConfirmDeviceCredentialIntent()
方法在你的应用里重新认证.
要查看实现此功能的应用程序,请参阅 Confirm Credentials sample.
直接分享(Direct Share)

这个预览版提供的API,让用户的分析更直观,更快.现在,你可以定义一个特定的activity在你的应用里,直接分享目标.这些直接的分享目标是通过分享菜单暴露给用户的. 这个功能允许分享内容对象,如联系人,在其他的应用里. 例如, 直接分享目标可能启动一个其他社交网络应用的activity,这直接让用户分享内容到该程序特定的朋友圈或社区活动.
为了能直接分享目标,你必须定义一个类继承 android.service.
chooser.ChooserTargetService类
. 在清单文件声明这个类ChooserTargetService
指定BIND_CHOOSER_TARGET_SERVICE权限
,添加意图过滤器的action SERVICE_INTERFACE
.
下面是 ChooserTargetService
示例在清单文件的声明.
<service android:name=".ChooserTargetService" android:label="@string/service_name" android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>
为每个你想暴露 ChooserTargetService的activity
,添加一个 <meta-data>
元素,使用 "android.service.chooser.chooser_target_service"
名字,在你的清单文件.
<activity android:name=".MyShareActivity” android:label="@string/share_activity_label"> <intent-filter> <action android:name="android.intent.action.SEND" /> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ChooserTargetService" /> </activity>
语音互动(Voice Interactions)
这个预览版提供了一个新的语音交互的API,连同语音操作Voice Actions, 允许你建立对话的声音体验到你的应用程序. 调用 android.app.Activity.isVoiceInteraction()
方法来确定 ,如果你的activity是通过语音动作开启的. 如果是这样,你的应用可以使用android.app.VoiceInteractor
类来请求语音确认, 从选项列表和更多中选择.
了解更多实现语音操作,请阅读 Voice Actions developer site.
协助API(Assist API)
预览版提供了一种新的方式,从过助手让用户与你的应用交互.使用这个功能, 用户必须能够启动助手使用当前的上下文。一旦启动, 用户可以召唤任何应用的助手,通过长按Home键。
你的应用程序可以选择不共享当前的上下文给助手,通过设置 FLAG_SECURE
标记. 除了标准的平台信息传递到助手, 你的应用可以使用新的 android.app.Activity.AssistContent
类来共享附加信息.
为了在你的应用程序里提供给助手附加的上下文,请按照下列步骤操作:
- 实现
Application.OnProvideAssistDataListener
接口. - 用
registerOnProvideAssistDataListener()注册一个Listner
. - 为了提供activity特定的上下文信息, 复写
onProvideAssistData()
回调和可选的 newActivity.onProvideAssistContent()
回调.
通知(Notifications)
这个预览版增加了通知如下的API变化:
- 新的
NotificationListenerService.INTERRUPTION_FILTER_ALARMS
过滤级别 ,相当于 Alarms 只是请勿打扰模式. - 新的
Notification.CATEGORY_REMINDER
category 用于区分从其他事件 (CATEGORY_EVENT
) and alarms (CATEGORY_ALARM
)预定的提醒. - 新的
android.graphics.drawable.Icon
类可以附在通知栏上通过Notification.Builder.setSmallIcon(Icon)
andNotification.Builder.setLargeIcon(Icon)
方法. - 新的
NotificationManager.getActiveNotifications()
方法 允许的app找出,他们的通知是否还活着。 - 了解实现该功能的实例, 请阅读 Active Notifications sample.
蓝牙手写笔支持(Bluetooth Stylus Support)
这个预览版提供了蓝牙手写笔用户输入的支持. 用户可以配对或连接他们的手机和平板兼容的蓝牙触控笔. 当连接时,触摸屏的位置信息,压力和按钮信息融合,以提供一个更大范围单独的触摸屏。 你的应用程序可以监听手写笔的按键和执行次数的操作,通过在activity注册new View.onStylusButtonPressListener
andGestureDetector.OnStylusButtonPressListener
回调.
使用 MotionEvent
方法和常量来检测触摸笔按钮的交互:
- 如果用户触摸了触摸笔上的一个按钮在你的应用屏幕上, the
getTooltype()
方法会返回TOOL_TYPE_STYLUS
. - 当App针对M预览版时,当用户按压主触摸笔按钮时 该
getButtonState()
方法会返回MotionEvent.STYLUS_BUTTON_PRIMARY
.如果触笔具有第二按钮时,当用户按下它时,相同的方法会返回MotionEvent.STYLUS_BUTTON_SECONDARY
.如果用户同时按下两个按钮,则该方法返回来两个值进行逻辑或运算在一起(STYLUS_BUTTON_PRIMARY|STYLUS_BUTTON_SECONDARY
). - 对于针对低版本的应用程序, 该
getButtonState()
方法返回BUTTON_SECONDARY
(初级触笔按钮按下),BUTTON_TERTIARY
(二级触笔按钮按下), 或两者都有.
(改进的蓝牙低能量扫描)Improved Bluetooth Low Energy Scanning
如果你的应用程序执行蓝牙低能量扫描, 你可以使用android.bluetooth.le.ScanSettings.Builder.setCallbackType()
方法来指定你想要的回调被通知。 当公告包匹配到ScanFilter
, 当一段时间没有找到。这种方法来扫描比以前的平台版本提供的更节能。
Hotspot 2.0 Release 1 Support
This preview adds support for the Hotspot 2.0 Release 1 spec on Nexus 6 and Nexus 9 devices. To provision Hotspot 2.0 credentials in your app, use the new methods of the WifiEnterpriseConfig
class, such assetPlmn()
and setRealm()
. In the WifiConfiguration
object, you can set the FQDN
and theproviderFriendlyName
fields. The new ScanResult.PasspointNetwork
property indicates if a detected network represents a Hotspot 2.0 access point.
4K显示模式(4K Display Mode)
该平台现在允许应用程序请求将显示分辨率升级到4K渲染的硬件兼容.要查询当前的物理分辨率,使用新的API android.view.Display.Mode
.如果UI绘制在一个较低的逻辑分辨率,并放大到一个更大的屋里分辨率上,要注意,物理分辨率 Display.Mode.getPhysicalWidth()
方法返回的可能不同于逻辑分辨率getSize()报告的
.
你可以请求系统改变屋里分辨率在你的应用程序,在它运行时,通过设置你的应用程序的窗口属性 WindowManager.LayoutParams.preferredDisplayModeId
.此功能是非常有用的,如果你想切换到4K的显示分辨率. 在4K显示模式下, 在UI继续在原分辨率(如1080)被渲染并且放大到4K, 但SurfaceView对象可能在原始分辨率上显示内容
.
主题化 ColorStateLists(Themeable ColorStateLists)
主题属性现在在运行的M 预览版设备上支持ColorStateList。该getColorStateList()
and getColor()方法已经被弃用
. 如果要调用这些 APIs, 调用新的 Context.getColorStateList()
or Context.getColor()
方法来替代. 这些方法,可以也可以由 ContextCompat 的v4的appcompat哭只库中提供
.
音频功能(Audio Features)
这个预览增强了在Android上的音频处理:
- 支持 MIDI 协议, 用新的
android.media.midi
APIs.使用这些API来发送和接受 MIDI 事件. - 新的
android.media.AudioRecord.Builder
andandroid.media.AudioTrack.Builder
类来创建数字音频采集和回放各自的对象, 并配置音频源和汇的属性来覆盖系统默认值. - API钩子关联音频和输入设备。这是特别有用的,如果你的应用程序允许用户启动一个语音搜索从游戏控制器或遥控器连接到Android TV.当用户启动一个搜索系统调用新的
android.app.Activity.onSearchRequested()
回调. 以确定该用户的输入装置具有一个内置麦克风, 从该回调检索InputDevice
对象,然后,调用新的InputDevice.hasMic()
方法. - 新的
android.media.AudioDevicesManager
类,让你找回一个列表中的所有连接的源和汇的音频设备. 你 - 也可以指定一个
android.media.OnAudioDeviceConnectionListener
对象,如果你希望你的应用被通知到,当音频设备连接或断开时。
视频功能(Video Features)
该预览版添加了新的功能,给处理视频的API,包括:
- 新的
android.media.MediaSync
类 这有助于应用程序同步呈现音频和视频流.音频缓冲区使用非阻塞方式,并通过回调返回.它还支持动态播放速率. - 新的
MediaDrm.EVENT_SESSION_RECLAIMED
事件, 这表明通过应用打开的回话已经由资源管理器开垦. 如果你的应用使用了 DRM 回话, 你应该处理这个事件,并确保不使用回收的回话. - 新的
MediaCodec.CodecException.ERROR_RECLAIMED
错误代码, 这表明该资源管理器回收了使用编解码器的媒体资源. 这个异常, 编解码器必须被释放, 因为它已经转移到终端状态. - 新的
MediaCodecInfo.CodecCapabilities.getMaxSupportedInstances()
接口获取一个提示为支持的并发实例的编解码器的最大数量. - 新的
MediaPlayer.setPlaybackParams()
方法 来设置媒体播放速率根据镜头的播放的快慢. 它也自动的延伸或加速音频的播放,结合着视频.
相机功能(Camera Features)
这个预览包括用于访问相机的闪光灯和图像的后处理:
闪光灯API(Flashlight API)
如果摄像机设备具有闪光灯,你可以调用CameraManager.setTorchMode()方法,无需打开设想装置开启或关闭闪光灯的手电筒模式.该应用程序不具备闪光灯或相机设备的独家所有权. 手电筒模式被关闭并变得不可用,当相机设备变得不可用,或其他的相机源变得不可用。其他应用程序也可以调用setTorchMode()关闭手电筒模式. 当最后一个应用程序,接通的手电筒模式被关闭时,手电筒模式被关闭.
你可以通过调用CameraManager.registerTorchCallback()
方法,注册一个回调来获取手电筒模式状态.第一次注册回调, 则立即调用闪光灯目前已知的所有的相机设备的手电筒模式状态. 如果手电筒模式成功的打开或关闭,该 CameraManager.TorchCallback.onTorchModeChanged()方法被调用
.
后处理API(Reprocessing API)
该 Camera2
API 扩展到支持YUY和私人不透明格式的图像后处理.你的应用程序确定后处理能力可用,通过CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES
. 如果设备支持后处理,可以通过调用 CameraDevice.createReprocessableCaptureSession()创建一个后处理摄像头捕获session,并为输入缓冲区再处理请求。
使用该 ImageWriter
类连接输入缓冲流到相机后处理输入.为了得到一个空的缓冲区,按照这种编程模型:
- 调用
ImageWriter.dequeueInputImage()
方法. - 数据填充到输入缓冲器.
- 通过
ImageWriter.queueInputImage()
方法,发送缓存到相机.
如果你使用 ImageWriter
跟 android.graphics.ImageFormat.PRIVATE
图像,你的应用不能直接访问图片数据. 相反,通过调用没有没有任何缓冲区拷贝的 ImageWriter.queueInputImage()
方法,直接传递ImageFormat.PRIVATE图像的ImageWriter.
该 ImageReader 现在支持
android.graphics.ImageFormat.PRIVATE
格式化图像流.这种支持允许你的应用程序保持ImageReader输出图像的圆形图像队列中,选择一个或多个图像,并将它们发送给ImageWriter给相机后处理。
Android的工作特点(Android for Work Features)
该预览版包括为Android以下的新的API工作:
- 为公司拥有的,一次性使用的设备加强控制: 设备所有者现在可以控制以下设置,提高企业自备,一次性使用(COSU)设备管理:
- 禁用或重新启用键盘锁,通过使用DevicePolicyManager.setKeyguardEnabledState()方法.
- 禁用或重新启用状态栏 (包括快速设置, 通知, 和通过手势启动Google Now) 通过
DevicePolicyManager.setStatusBarEnabledState()
方法. - 禁用或重新启用安全启动,通过
UserManager
的常量DISALLOW_SAFE_BOOT
. - Prevent the screen from turning off while plugged in with the
Settings.Global
constantSTAY_ON_WHILE_PLUGGED_IN
.
- 静默安装和通过设备拥有着卸载: 设备拥有着现在可以静默安装和使用该API的
PackageInstaller
卸载应用程序, 独立的Google Play.你可以使用现在的设备,通过设备拥有者获取和安装应用程序,而无需用户交互. 该功能对于那些启用一触式设备的kiosks或其他没有激活google账号的设备是非常有用的. - 静默访问企业证书: 当一个应用程序调用
choosePrivateKeyAlias() 之前
, 用户被提示选择一个证书, 配置文件或者设备拥有着现在可以调用DeviceAdminReceiver.onChoosePrivateKeyAlias()
方法来静默的提供一个别名请求应用程序.该功能可让你授予管理应用程序访问证书,而无需用户交互。 - 自动接受系统更新. 通过使用
DevicePolicyManager.setSystemUpdatePolicy()方法设置系统更新策略
,设备拥有着现在可以自动接收系统更新, 例如a kiosk 设备下,或延迟更新并防止它被用户采取的长达30天 .此外, 管理员可以设置一个每天的时间窗口必须更新,例如在一个小时里,当a kiosk 设备没有在使用. 当系统更新可用时, 系统会检查是否应用的工作策略设置了更新系统策略,并采取相应措施. - 委托证书安装: A Profile或设备管理者现在可以授予第三方应用程序来调用这些
DevicePolicyManager
证书管理的 APIs的能力: - 企业恢复出厂设置保护: a Profile,设备拥有者, 你现在可以配置参数来解锁恢复出厂设置保护 (FRP) 通过设置
DeviceManagerPolicy.EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS
包. 一个 NFC程序开发者提供这些参数后,设备已经被重置到解锁 FRP , 而不需要事先配置google账号。如果,你没有修改这些参数, FRP 仍然在,并防止设备从没有先前激活的设备凭证被激活。此外, 通过设置Google Play业务的app限制,设备拥有着可以指定替代google 账号来解锁 FRP,取代在那些设备上的激活。
- 数据使用情况跟踪. A Profile和设备拥有着现在可以通过新的方法 new
android.app.usage.NetworkStatsManager
查询在Setting--Data 数据使用情况显示的情况下数据使用情况统计 .资料用户被自动授予查询数据上他们所管理的个人资料,当设备拥有者获得访问管理的初级用户的使用数据权限时. - Runtime permission management:
A Profile 或设备拥有者可以使用
DevicePolicyManager.setPermissionPolicy()为所有的应用程序设置所有的运行时请求
, 或者正常的提示用户授予权限或者自动的授予权限或者静默的拒绝权限. 如果是后者的策略,用户无法在屏幕的设置里修改应用程序的权限. - VPN 的设置: VPN 的应用现在在 Settings > More > VPN 是可见的. 此外,伴随VPN使用的通知,现在,具体到VPN的配置方式。对于 Profile 所有者, 通知被具体到是否VPN被配置了一个管理的profile,一个个人的profile,后者二者皆有. 对于一个设备拥有者, 该通知是否指定到整个设备.
- 工作状态通知: 状态栏的图标现在会出现,无论管理profile的应用是否在前台有一个activity,此外 ,如果设备没有锁定,在管理profile的应用的activity里, 用toast 通知在工作profile的用户.
对于在M开发者预览版里所有API变更的详细试图,请阅读 API Differences Report.