android M API 概述

原文地址: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.

如果你正在测试此功能,请按照依稀步骤操作:

  1. 安装 Android SDK Tools Revision 24.3,如果你还没有安装。 
  2. 加入一个新的指纹,通过 Settings > Security > Fingerprint, 然后,按照说明操作。
  3. 是用模拟器来模拟指纹触摸事件,通过下面的命令.使用相同命令来模拟在锁屏上或你的app的指纹触摸事件。
    adb -e emu finger touch <finger_id>

    On Windows, you may have to run telnet 127.0.0.1 <emulator-id> followed by finger 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类来共享附加信息.

为了在你的应用程序里提供给助手附加的上下文,请按照下列步骤操作:

  1. 实现 Application.OnProvideAssistDataListener 接口.
  2. 用 registerOnProvideAssistDataListener()注册一个Listner.
  3. 为了提供activity特定的上下文信息, 复写 onProvideAssistData() 回调和可选的 new Activity.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) and Notification.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 and android.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类连接输入缓冲流到相机后处理输入.为了得到一个空的缓冲区,按照这种编程模型:

  1. 调用 ImageWriter.dequeueInputImage() 方法.
  2. 数据填充到输入缓冲器.
  3. 通过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 constant STAY_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和设备拥有着现在可以通过新的方法 newandroid.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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值