Android 5.0 api(上)

开始developing

5.0创建app,第一步需要获得SDK,然后使用SDK Manager下载5.0 SDK Platformsystem images.

更新target API level

设置 targetSdkVersion "21", Android 5.0 system image 运行测试后, 再发布更新改变后的app.

使用Android 5.0 APIs 时,也可以支持以前的版本: 通过在不支持运行在minSdkVersion的代码里添加一些条件辨别系统API级别. 了解更多向前兼容请阅读Supporting Different Platform Versions.

UI(用户界面)

材料设计支持

 

Android 5.0 增加了新的材料设计风格. 你可以运用材料设计支持的可视化动态与UI元素转换,让用户感觉更自然. 这种支持包含:

 

主题

视觉阴影

RecyclerView小部件

拉拽动画和样式效果

材料设计动画和activity转换过渡效果

基于视图状态的视图属性动画

使用调色板定制UI widgetsapp bars

基于XML vector graphics的动画与不是动画的drawables

 

了解更多关于将材料设计添加到app,请阅读 Material Design.

 

documents activities同时存在the recents screen

以前的版本,the recents screen只能为用户与之交互的APP显示最近一次的task,现在你的APP满足因为documents额外的activities需要可以开更多的tasks.这种多任务的特性让用户在最近的屏幕里切换活动和文档的有一致的体验感觉. 这种并发任务的例子可能包括:web 浏览器应用程序打开标签,游戏,消息传递应用程序的聊天,你的APP可以通过ActivityManager.AppTask class管理他的tasks.

为了系统能够把你的activities当作tasts,需要插入一个 logical break,当你用 startActivity()启动一个activity时使用FLAG_ACTIVITY_NEW_DOCUMENT. 你也可以通过在manifest清单里设置<activity>元素的 documentLaunchMode 属性  "intoExisting" or "always".

为了避免the recents screen混乱你可以在你的应用里设置出现在屏幕里最大tasks数量. To do this,设置 <application> 属性android:maxRecents. 最多可以指定为50 (低内存设备为25).

Tasks in the recents screen can be set to persist across reboots.你可以使用 android:persistableMode 属性控制the persistence behavior.你也可以通过调用setTaskDescription()更改最近屏幕里的活动视觉效果, 例如activitycolor, label, and icon.

WebView的更新

Android 5.0更新了实现Chromium M37WebView,增强了安全性稳定性,以及bug修复. The default user-agent string for a WebView running on Android 5.0 has been updated to incorporate 37.0.0.0 as the version number.

这个版本新出了个 PermissionRequest ,它允许你的应用程序通过web APIsgetUserMedia()授予WebView访问受保护的资源如相机,麦克风的权限. 你的APP对这些资源必须有恰当的Android permissions 去授予WebView权限.

用这个新的onShowFileChooser(),现在你可以在WebView 里使用an input form field , 和启动一个file chooser 选取设备里的images files.

此外, 这个版本对 WebAudio, WebGL, and WebRTC open standards提供了支持. 了解更多关于这个版本的这个新特性, WebView for Android.

屏幕捕捉和分享(Screen capturing and sharing

Android 5.0允许你使用新的apiandroid.media.projection为你的APP添加屏幕捕捉和屏幕共享功能,这个功能很有用,如:在一个视频会议程序里你希望共享屏幕.

新的createVirtualDisplay()允许你的app捕捉到的主屏幕的内容(默认显示的) 转换成一个Surface 对象,你的APP可以在网络里发送这个Surface 对象. 这个API只可以捕捉与安全无关的屏幕内容, 而不是系统的音频. To begin 屏幕捕捉,你的 app 必须首先请求用户权限request the user’s permission by通过一个关于屏幕捕捉的dialog ,这个dialog是使用Intent通过createScreenCaptureIntent() 获得的.

 

一个例子,关于怎么使用 the new APIs, 在示例项目里(the sample project)看 MediaProjectionDemo.

Notifications(通知)

屏幕锁定状态时的通知

Android 5.0 中,屏幕锁定状态下也可以显示通知信息. 用户可以通过设置选择决定是否允许敏感的通知信息显示在锁定的屏幕上.

 

当通知信息显示在锁定的屏幕上时,你的应用程序可以控制信息的可见级别:调用setVisibility() 并且指定这些值之一:

 

VISIBILITY_PRIVATE: 显示基本信息,如信息的图标, 但是隐藏了信息通知的全部内容.

VISIBILITY_PUBLIC: 显示全部的通知信息内容.

VISIBILITY_SECRET:什么都不显示,即使图标也不显示.

 

当可见级别为VISIBILITY_PRIVATE, 你也可以提供一个通知内容里隐藏个人信息的redacted versiont.例如,一个SMS app 可能会显示一个"You have 3 new text messages" 的通知,但是隐藏了信息的内容和发送人. 提供这种替代通知, 首先使用Notification.Builder创建更换通知. 当你创建私人的notification object, 使用setPublicVersion()为它附上这个更换的通知.

通知元数据(Notifications metadata

 

Android 5.0使用和通知联系在一起的元数据,更智能的整理通知. 设置元数据,构建通知时,调用Notification.Builder的以下方法:

 

setCategory():当设备在优先级模式,告诉系统如何处理你的app notifications (例如, 代表来电的通知, 即时消息, or 响铃).

setPriority():标记一个通知相比正常通知更重要还是更次要. 有优先级标记的Notifications,如果通知也有声音或振动,在出现的小浮动窗口中设置 PRIORITY_MAX 或者 PRIORITY_HIGH.

addPerson(): 使你可以添加一个或多个与通知相关的人.你的 app 可以使用它告诉系统,这些指定的人的通知应该在一个group, 或者根据这些人的重要程度排列.

Graphics(图形)

Support for OpenGL ES 3.1

Android 5.0OpenGL ES 3.1增加了 Java interfaces native support. OpenGL ES 3.1 提供的关键的新功能包括:

 

计算着色器

分离着色对象

间接绘制命令

多重采样和模板纹理

着色语言的改进

先进混合模式的扩展和调试

OpenGL ES 2.0 3.0的向前扩展性

 AndroidOpenGL ES 3.1 提供了Java interfaceGLES31.使用OpenGL ES 3.1,要在清单文件<uses-feature> 标签里声明: android:glEsVersion 属性.例如:

 

<manifest>

    <uses-feature android:glEsVersion="0x00030001" />

    ...

</manifest>

关于使用OpenGL ES的更多信息, 包括如何在运行时检查设备支持的OpenGL ES版本,看OpenGL ES API指南.

Android扩展包(Android Extension Pack

除了OpenGL ES 3.1, 此版本提供了Java接口和先进的图形功能的原生支持扩展包. 这些扩展视为Android单包. (如果android_extension_pack_es31a扩展是存在的,你的应用程序可以在包中呈现所有引用扩展,并且用一个单一的#扩展语句让着色语言有特征.)

 

该扩展包支持:

Guaranteed fragment shader support for shader storage buffers, images, and atomics (Fragment shader support is optional in OpenGL ES 3.1.) 保证片段着色器支持着色器存储缓冲器,图像,和原子(OpenGL ES 3.1中片段着色器support是可选的)

Tessellation and geometry shaders 镶嵌和几何着色器

ASTC (LDR) texture compression format  ASTC纹理压缩格式(LDR

Per-sample interpolation and shading 每采样插值和阴影

Different blend modes for each color attachment in a frame buffer一个帧缓冲区的每个颜色属性的不同的混合模式

该扩展包提供有gles31extJava接口。在您的应用程序清单,你可以声明你的应用程序必须安装在支持扩展包的设备上. 例如:

 

<manifest>

    <uses-feature android:name=“android.hardware.opengles.aep”

        android:required="true" />

    ...

</manifest>

Media(媒体)

先进功能相机的Camera APICamera API for advanced camera capabilities

Android 5.0引入了新的android.hardware.camera2 API来促进精密照片捕捉和图像处理.您可以调用getcameraidlist()有效的访问系统的相机设备,调用opencamera()连接到一个特定的装置。捕捉图像,要创建一个cameracapturesession并且指定一个Surface objects发送捕获的图像. 这个 CameraCaptureSession可以被设置成单发图像和多发图像.

 

通知捕捉到新的图像时, 在捕捉请求里实现CameraCaptureSession.CaptureCallback 监听器. 当系统完成捕捉请求,你的 CameraCaptureSession.CaptureCallback listener收到一个callonCaptureCompleted(),CaptureResult里提供给你图像捕捉的元数据.

 

The CameraCharacteristics class 让你的app 在设备上检测哪些相机特性可以使用.对象的INFO_SUPPORTED_HARDWARE_LEVEL 属性代表相机功能的水平.

 

所有的设备都至少支持INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY (硬件级水平), 过时的Camera API就可以完成.

支持INFO_SUPPORTED_HARDWARE_LEVEL_FULL硬件级的设备能够手动拍摄和处理图像, 并且可以高帧速率拍摄高分辨率的图像

看怎么使用更新过的 Camera API, 转到这个版本的Camera2Basic Camera2Video实现样例.

音频播放(Audio playback

音频播放在这个版本有如下改变:

 

你的应用程序现在可以提供音频数据作为一个缓冲区,在相同的格式,由mediacodec

你的app现在可以以浮点格式提供音频数据 (ENCODING_PCM_FLOAT). 这允许更大的动态范围,更一致的精度,和更大的空间. 在中间运算中浮点运算是特别有用的. 播放终端使用整数格式的音频数据,并以较低的bit depth. (Android 5.0, 内部的传输途径还不支持浮点.)

你的app现在可以为音频数据提供缓存,由MediaCodec以同样的格式提供。

WRITE_NON_BLOCKING选项可以简化appbuffering(缓冲)和multithreading(多线程).

媒体播放控制(Media playback control

使用一个新通知和media APIs ,确保系统UI 你的媒体播放,而且可以提取和显示专辑封面。.相比于 MediaSessionMediaController类, 通过一个UIa一个service更容易控制媒体播放

 

新的MediaSession类取代了过时的RemoteControlClient 类,提供了一组回调方法,处理操作播放传输控制和媒体按钮. 如果你的app提供了媒体播放并且在Android TV或者Wear平台上运行, 使用MediaSession类里相同的回调方法处理操作播放传输控制.

 

现在你可以用新的MediaController类建立自己的媒体控制的应用程序. 这个类提供了一个在你的appUI进程里监控和控制媒体播放的安全线程. 创建一个controller, 指定一个 MediaSession.Token对象,这样你的app可以与给定的MediaSession相互作用. 通过使用 MediaController.TransportControls 方法,你可以发送一个命令如play(), stop(), skipToNext(), setRating()在对话层控制媒体播放.通过这个controller, 你也可以注册一个MediaController.Callback对象监听对话层的元数据和状态变化.

 

另外, 通过新的Notification.MediaStyle类,你可以创建丰富的notifications,允许播放控制,与会话层的媒体播放绑定在一起.

(待续)(不合理处请指教)

你可能感兴趣的:(Android 5.0 api(上))