android API官网上发布的api变更的功能介绍,虽说都是英文的,要查代码还是比较方便的。
Platform Version | API Level | VERSION_CODE | Notes |
---|---|---|---|
Android 4.4 | 19 | KITKAT |
Platform Highlights |
Android 4.3 | 18 | JELLY_BEAN_MR2 |
Platform Highlights |
Android 4.2, 4.2.2 | 17 | JELLY_BEAN_MR1 |
Platform Highlights |
Android 4.1, 4.1.1 | 16 | JELLY_BEAN |
Platform Highlights |
Android 4.0.3, 4.0.4 | 15 | ICE_CREAM_SANDWICH_MR1 |
Platform Highlights |
Android 4.0, 4.0.1, 4.0.2 | 14 | ICE_CREAM_SANDWICH |
|
Android 3.2 | 13 | HONEYCOMB_MR2 |
|
Android 3.1.x | 12 | HONEYCOMB_MR1 |
Platform Highlights |
Android 3.0.x | 11 | HONEYCOMB |
Platform Highlights |
Android 2.3.4 Android 2.3.3 |
10 | GINGERBREAD_MR1 |
Platform Highlights |
Android 2.3.2 Android 2.3.1 Android 2.3 |
9 | GINGERBREAD |
|
Android 2.2.x | 8 | FROYO |
Platform Highlights |
Android 2.1.x | 7 | ECLAIR_MR1 |
Platform Highlights |
Android 2.0.1 | 6 | ECLAIR_0_1 |
|
Android 2.0 | 5 | ECLAIR |
|
Android 1.6 | 4 | DONUT |
Platform Highlights |
Android 1.5 | 3 | CUPCAKE |
Platform Highlights |
Android 1.1 | 2 | BASE_1_1 |
|
Android 1.0 | 1 | BASE |
Android API变更概要
Android 1.5 API变更概要:
1、UI framework Framework for easier background/UI thread interaction
新SlidingDrawer 组件
新HorizontalScrollview 组件
2、AppWidget framework
一些关于创建桌面AppWidget 的API.
提供根据自定义的内容创建LiveFolders的API
3、Media framework
原声录音和回放 APIs
交互式的MIDI 回放引擎
开发者使用的视频录像API (3GP format).
视频相片分享 Intents
媒体搜索Intent
4、Input Method framework
输入法服务framework
文本预测引擎
提供具有下载能力的IME给使用者
5、Application-defined hardware requirements
应用可定义硬件需求,应用程序可以定义 说明此程序需要什么硬件需求.比如是否需要物理键盘或者轨迹球.
6、Speech recognition framework
支持语音识别库.
7、Miscellaneous API additions
LocationManager -应用可以接收到位置改变的信息.
WebView - 触摸start/end/move/cancel DOM 事件的支持
重建Sensor Manager APIs
GLSurfaceView - 创建OpenGL 应用更加方便的framework .
软件升级安装成功的Broadcast Intent - 更加平和优秀的软件升级体验
Android 1.6 API变更概要:
1、UI framework
新的类 android.view.animation 控制动画行为:
AnticipateInterpolator
AnticipateOvershootInterpolator
BounceInterpolator
OvershootInterpolator
新的XML 属性androidnClick ,从一个layout文件描述一个view的 View.OnClickListener.
对不同分辨率的屏幕的新的支持. 对于Bitmap和Canvas会执行有针对性的缩放行为.该框架会根据屏幕分辨率和其他内容自动缩放bitmap等.
要在你的应用中使用Android 1.6包含的API的话你必须要设置 "4"属性在manifest的 元素中
2、Search framework
应用程序现在可以公开的有关内容,作为建议放入快速搜索框,新的设备范围内的搜索功能,是可从主屏幕搜索。为了支持这一点,搜索框架增加了新的属性,可搜索的元数据文件。有关完整的信息。
3、Accessibility framework
New android.accessibility package that includes classes for capturing accessibility events and forwarding them to an AccessibilityService handler.
New AccessibilityService package that lets your application track user events and provide visual, audible, or haptic feedback to the user.
4、Gesture Input
新的gesture API :创建,识别,读取,保存手势.
5、Text-to-speech
新的android.speech.tts 包提供了TTS文本朗读功能,从一个文本生成一个声音文件的回放.
6、Graphics
android.graphics 中的类,现在支持为不同的屏幕尺寸进行缩放.
7、Telephony
新的SmsManager 发送和接受短信.
8、Utilities
新的DisplayMetrics 字段决定当前设备屏幕的密度.
9、Android Manifest elements
新的 元素
新的 标签
glEsVersion: 指定最小openGL ES的版本
元素的新的属性:
目标SDK版本: 应用程序能够指定目标版本. 它能够运行在旧版本(低至minSdkVersion), 他是按照应用程序的指定版本开发的. Specifying this version allows the platform to disable compatibility code that is not required or enable newer features that are not available to older applications.
maxSdkVersion: 指定设计这个程序运行的最高版本 重要: 当使用 这些属性前请认真阅读文档.
10、New Permissions
CHANGE_WIFI_MULTICAST_STATE: 允许应用进入Wi-Fi 多点传送模式.
GLOBAL_SEARCH: 允许全局搜索系统,以便精确确定 content provider.
INSTALL_LOCATION_PROVIDER: 允许应用在Location Manager.安装一个location provider.
READ_HISTORY_BOOKMARKS: 允许应用读取(并不能写) 用户的浏览记录和书签
WRITE_HISTORY_BOOKMARKS: 允许应用写入 (并不能读) 用户的浏览记录和书签
WRITE_EXTERNAL_STORAGE: 允许程序写入外部存储器.应用程序使用API级别3下将默认授予此权限 (这对用户可见的); 应用程序使用API level4 或者更高的,必须要明确的宣告此权限.
Android 2.0 API变更概要:
1、Bluetooth 开启关闭蓝牙
设备和服务发现
使用 RFCOMM连接一个可插拔的设备收发数据
公布RFCOMM 服务和监听接收 RFCOMM 连接
2、Sync adapters
新的APIs, 同步桥接器连接任何backend
3、Account Manager
集中的帐户管理器 API ,安全的储存和使用可信的tokens/passwords
4、Contacts
新的通信APIs 允许获取多个账户的数据.
新的快速通信framework APIs 允许开发者在他们的应用中创建通信标记, 一键点击标记打开一个新的窗口展示一个如何联系当前人的列表.
5、WebView
不赞成使用的类: UrlInterceptHandler, Plugin, PluginData, PluginList, UrlInterceptRegistry.
6、Camera
颜色模式, 场景模式 闪光模式, 焦点模式, 白平衡 旋转和其他设置的新的特征.
当缩放级别改变的时候,会回调新的缩放回调接口.
7、Media
MediaScanner现在为所有图片生成缩微图when they are inserted into MediaStore.
新的缩微图 API : 检索需要的图片和视频的缩微图.
8、Other Framework
android.R.style 中新的系统主题,能够更加简单的显示当前acitivities的系统壁纸或者保持之前的activity在后台.新的壁纸管理器API 取代并且增加了wallpaper APIs ,我们可以允许我们的应用要求设置系统壁纸.
新的Service APIs帮助应用准确的处理Service 生命周期 ,在指定的低内存状态下service将会被关闭.
o Service.setForeground() 不推荐使 用,并且现在这个方法并没有实际执行. .他被一个新的API所取代, startForeground(), that helps (and requires) associating an ongoing notification with the foreground state.
MotionEvent 如果设备允许的话,MotionEvent 会返回多点触摸信息.最多可同时获取3点
KeyEvent 现在有了新的按键发送 APIs,去帮助实现 action-on-up 和长按键行为, 一个新的机制取消按键 (虚拟按键).
WindowManager.LayoutParams 现在有了新的常量允许窗口能够在被锁或者其他的状况中唤醒屏幕,这个允许程序能够让例如闹钟等的应用实现唤醒设备.
New Intent APIs 广播设备的对接状态,当这个设备放在桌面或者停车场,允许程序启动特殊的activity.
9、Key events executed on key-up
Android 2.0能够使用虚拟按键HOME, MENU, BACK和SEARCH,而非物理按键,为了让用户在他们的设备中获得最好的用户体验,android平台现在把这些按键执行加入到了key-up,做了 key-down/key-up 配对,而非只有key-down.,这有助于防止意外按钮事件,并让使用者按下按钮区域,然后拖动而不生成一个事件出来。
这种改变只会影响你的应用程序一点,如果它是拦截按钮事件,最好用key-down,而不是key-up.。特例,如果您的应用程序拦截BACK 键,你应该确保你的应用妥善处理按键事件。
Android 2.0.1 API变更概要:
新的快速联系人标记风格(quickContactBadgeStyle)* 属性,让应用的QuickContactBadge 组件接收必要的风格.
当在manifest里面宣布了filter,取消了支持 ACTION_CONFIGURATION_CHANGED 广播 ,如果想要去接收这个广播, 这个应用必须注册 registerReceiver(BroadcastReceiver, IntentFilter).
性能上的改变:
1、Bluetooth
改变了 ACTION_REQUEST_ENABLE 和ACTION_REQUEST_DISCOVERABLE的返回值
ACTION_REQUEST_ENABLE 如果蓝牙是成功开启的,现在返回RESULT_OK .如果使用者拒绝开启蓝牙的请求,则会返回RESULT_CANCELED .
ACTION_REQUEST_DISCOVERABLE 如果使用者拒绝启动蓝牙或者蓝牙的可发现功能,则返回 RESULT_CANCELED .
通讯
The ACTION_INSERT Intent returns RESULT_CANCELED in cases where the contact was not persisted (例如剪切保存到一个空的操作里面).
修复错误:
资源
现在framework可以正选择应用资源的根据API等级划分的文件夹(drawable-v4是API level4版本用的资源).现在的版本这个功能不能正常工作的问题已经修复.
2、Contacts
The ACTION_INSERT Intent now returns the appropriate kind of URI when the request is made using the (now deprecated) Contacts APIs.
3、Other Framework fixes
getCallingPackage() 现在正确的报告包名, 而不是进程名.
Android 2.1 API变更概要:
1、Live Wallpapers 动态桌面
以下增加的API可以提供你开发动态的桌面:
新android.service.wallpaper 包.
新WallpaperInfo 类.
升级的WallpaperManager.
附加说明, 如果你的应用相提供Live Wallpapers的功能, 你必须记得增加一个 元素到你的应用manifest里面. 宣布这个属性android:name="android.software.live_wallpaper". 举例:
2、电话
新的SignalStrength 类提供当前网络信号的一些信息这些信息可以从onSignalStrengthsChanged(SignalStrength) 回调.
新的onDataConnectionStateChanged(int, int) 回调.
3、Views
新的View 方法isOpaque() 和onDrawScrollBars(Canvas).
新的RemoteViews 方法addView(int, RemoteViews) 和removeAllViews(int).
新的ViewGroup 方法isChildrenDrawingOrderEnabled() 和setChildrenDrawingOrderEnabled(boolean).
4、WebKit
新的WebStorage 方法操作网页数据缓存.
新的GeolocationPermissions 方法获取 Geolocation permissions 的出处, 把他们设置到 WebView上.
新的WebSettings 方法管理软件缓存, 网页缓存 和屏幕的缩放.
新的WebChromeClient 方法处理视频, 历史记录, 自定义view, 软件缓存限制还有其他
Android 2.2 API变更概要:
变更的类:
1、App installation on external storage media:允许程序安装到外部存储设备当中(SD card)当中
在manifest节点当中,可以添加android:installLocation属性,其值有一下三个:
internalOnly:安装到内存中
preferExternal:安装到外部存储设备中
auto:自动智能安装
Data backup:数据备份
允许程序在Application节点当中设置程序是否可回复旧版本;
android:backupAgent="android.app.backup.BackupAgentHelper"
Graphics:opengl绘图功能
新增类:
GLES20.class
ETC1.class:对图片的压缩、编码、解码等处理类
ETC1Util.class:使用ETC1来对图片进行压缩
ETC1Util.ETC1exture.class:对ETC1封装处理
ImageFormat.class:对jpg图片的处理
YuvImage.class:
4、Media音频类的更改:
AudioManager:类提供了访问量和振铃模式控制。
Soundpool:类管理和播放音频资源的应用程序
MediaRecorder.class:录制音频和视频
MediaScannerConnection.scanFile():扫描目录;
MediaScannerConnection.OnScanSompletedListener:对应的扫描目录监听事件
Speech recognition and third-party recognition engines:
语音识别和第三方识别引擎在android2.2当中提供了新的语音识别API。
RecognitionService.class:语音识别的基类.
RecognitionListener.class:语音识别的回调借口
RecognizerIntent.class:提供了启动语音识别方式
Camera and camcorder相机和摄像机的变动:
提高了相机的预览功能,和添加了相机的纵向拍摄和预览。
Camera.setZoomChangeListener()设置相机的焦距
Camera.Parameters:.class设置相机,例如焦距,曝光,变焦级别,视角等
Thumbnail.class:设置相机、图片和视频的缩略图
Device policy manager:设备策略管理器
UI Framework:UI框架
新增了“汽车模式”、“夜间模式”和UI框架管理
ScaleGestureDetector.class:多点触控、缩放等操作
1、对Microsoft
Exchange更好的支持。Android的几个新特性使之更适于Exchange企业环境。其中一些新特性列举如下:
基于用户名/密码的Exchange帐号自动检测
支持Exchange日历的同步
改进的安全性,管理员可以跨越设备强制应用安全策略
恢复出场设置——管理员可以将设备重置为出场设置,这样就能在设备被偷或丢失后擦除上面的敏感数据了
全局的地址列表查找——可以根据服务器端返回的列表帮助用户自动填充收件人的邮件地址
设备管理API。Android 2.2改进并新增了大量的设备管理API,开发者可以将其用在应用当中:
应用数据备份API——可以将应用数据备份到云中。如果用户切换到另一个Android设备,他就可以从之前的设备中恢复数据。
Cloud-to-Device消息API。云中的用户/系统可以凭借这种增强在设备上触发动作。该特性可以将移动警告发给手机并且支持双向的推同步服务。
可以直接在外部的内存设备(SD卡)上安装应用,还可以将应用从内部迁移到SD卡上,反之亦然。
网络共享。Android 2.2可以通过一台Android电话提供的热点将多个服务连接到Internet上。
性能。借助于新式的Dalvik JIT编译器,对于CPU密集型应用来说,Android 2.2的速度要比Android 2.1快2~5倍。根据Linpack基准测试结果,安装了Froyo的Nexus One电话可以达到37.5 MFlops,而同样的电话如果使用Android 2.1的话才有6.5 MFlops。
更快的浏览速度。由于浏览器现在使用了Chrome V8引擎,JavaScript代码的处理速度要比Android 2.1快2~3倍。
从浏览器中访问设备API。现在可以直接从浏览器中访问大量的设备API,如加速器、相机、声音识别、翻译等,这样Web应用就能以前所未有的方式与设备交互了。比如说,用户可以在拍完照后将其上传到网上,而这一切都是在浏览器内完成的。
Android 2.3 API变更概要:
Android 2.3的API Level为9,有关所有的API改变,帮助大家总结如下:
1、新增包
android.media.audiofx 混响音效
android.net.sip VOIP支持
android.nfc NFC支付支持
android.os.storage 存储管理类
详细的请查看 Android 2.3新特性及改进列表,已正式发布 一文
2、移除类
VMDebug
VMRuntime
VMStack
Zygote
3、更多改进
Extra Large Screens
目前Android 2.3将支持更大的屏幕尺寸定义,开发者可以通过 元素在你的 manifest files 中定义,新增的xlarge 标记将支持更多的屏幕尺寸, 有关具体的使用方法,Android开发网将在今后的文章中讲到。.
Graphics
Content Providers
Location
Storage
Package Manager
Telephony
4、Android 2.3 可以让应用本地访问声明周期和窗口
NativeActivity是一个新的Activity类整个声明周期的方法可以通过本地C/C++代码直接访问,使用Android NDK r5或更高版本即可支持。
有关最新版的NDK下载和NDK参考文档可以在 Android开发包下载 中找到。
有关Dalvik运行时库
5、新增manifest元素和属性
6、新增 Permissions
7、有关硬件的改进如下
android.hardware.audio.low_latency — 允许使用 low-latency 音频管道在设备和可以提供敏感的延迟在声音输出输出上。
android.hardware.camera.front — 前置摄像头控制类.
android.hardware.nfc — NFC近距无线设备管理.
android.hardware.sensor.barometer — 气压计感应器支持类The application uses the device's barometer.
android.hardware.sensor.gyroscope — 陀螺仪感应器支持类 The application uses the device's gyroscope sensor.
android.software.sip — SIP VoIP类.
android.software.sip.voip — 使用基于 SIP的 VoIP 服务.
android.hardware.touchscreen.multitouch.jazzhand — 增强的多点触控类,可以实现跟踪5个或更多的点.
以上是Android 2.3姜饼的API改变大全,有关具体的新增功能实用,将在今后的文章和Android进阶开发系列教程中逐一介绍。
Android 3.0 API变更概要:
Android 3.0 SDK中新增了哪些API呢? 我们总结下平板系统honeycomb中的新特性, 首先需要澄清的是经过Android2.3发现设置模拟器的分辨率到普通WVGA这样的解析度时平板的特性自动消失和Android 2.3没有什么太大区别,按照这样来看未来Android 3.0除了兼容平板外还继续可以被手机所支持,据称3.0的代码针对A9双核CPU进行了进一步的改进。
1、Fragments 碎片容器
有关Android Fragments的内容,Android开发网在前几天已经用几篇文章详细讲解了下,大家可以从Fragment对比Activity - Android碎片介绍 一文开始了解。
2、Action Bar 活动栏
活动栏Action Bar可以替换传统的标题栏在Activity窗口中,包括程序图标和一些新接口在activity的选项菜单中,另外Action Bar允许你
Include select menu items directly in the Action Bar—as "action items"—for quick access to global user actions.
In your XML declaration for the menu item, include the attribute, android:showAsAction with a value of "ifRoom". When there's enough room in the Action Bar, the menu item appears directly in the bar. Otherwise, the item is placed in the overflow menu, revealed by the icon on the right side of the Action Bar.
Add interactive widgets to the Action Bar—as "action views"—such as a search box.
In the XML for the menu item that should behave as an action view, include the android:actionViewLayout attribute with a layout resource for the action view or android:actionViewClass with the class name of the widget. Like action items, an action view appears only when there's room for it in the Action Bar. If there's not enough room, it is placed in the overflow menu and behaves like a regular menu item (for example, an item can provide a SearchView as an action view, but when in the overflow menu, selecting the item activates the search dialog).
Add an action to the application logo when tapped and replace it with a custom logo
The application logo is automatically assigned the android.R.id.home ID,
which the system deliveres to your activity's onOptionsItemSelected() callback when tapped. Simply respond to this ID in your callback method to perform an action such as go to your application's "home" activity.
To replace the icon with a logo,
Add breadcrumbs for navigating backward through fragments
Add built in tabs and a drop-down list for navigation
Customize the Action Bar themes and custom backgrounds
有关ActionBar的文章,可以参考 Action Bar使用方法 - Android活动栏 系列文章
3、System clipboard系统剪切板
Android 3.0中的剪切板进行了增强,本次可以支持除了纯文本外更多的内容,如,URL和Intent,对于剪切板类ClipboardManager仍然通过 getSystemService(CLIPBOARD_SERVICE)来实例化,新增的ClipData类用于管理具体的复制对象,可以在SDK的 android.content.ClipData.Item中找到。具体的使用Android123将在今后的文章中写道。
4、拖拽
开始拖拽内容在你的Activity中可以使用startDrag()方法在一个View中,这里View.DragShadowBuilder提供了拖拽时的阴影,对于拖拽的过程处理可以通过OnDragListener通过View的setOnDragListener()来设置,在拖拽的时候系统会自动调用onDrag()方法。
5、增强的appWidgets
Android 3.0的appWidget开始支持更丰富的控件,比如GridView, ListView, StackView, ViewFlipper和AdapterViewFlipper.而以前必须通过RemoteView显示一个文本或图片,本次全新的 RemoteViewsService增强了桌面小插件的功能。
6、增强的状态提示栏
新增的Notification API可以丰富你的状态栏,新的Notification.Builder类可以帮助你轻松实现,支持大图标提示信息通过setLargeIcon方法,通常显示一些社交类的软件,比如联系人照片,或相册缩略图,设置自定义状态栏,可以使用setTicker()方法。
7、内容加载器
新框架API提供了一个异步加载内容的泪,合并和UI组件和fragment来动态加载数据从工作者现成,使用CursorLoader子类来获取ContentResolver中的数据.
8、A2DP蓝牙和耳机控制API
Android honeycomb中没有忘记再次增强蓝牙,你可以通过初始化BluetoothProfile通过调用getProfileProxy()在处理 A2DP或耳机HEADSET设置,BluetoothProfile.ServiceListener可以获取客户端连接或断开的回调。
9、动画框架
3.0中Android再次增强动画播放类,ObjectAnimator和LayoutTransition需要大家了解一些。
10、扩展UI框架
新增以下UI控件
AdapterViewAnimator
AdapterViewFlipper
CalendarView
ListPopupWindow
NumberPicker
PopupMenu
SearchView
StackView
11、图形相关
1. 2D图形硬件加速Hardware accelerated 2D graphics , 在androidmanifest.xml的元素中添加android:hardwareAccelerated="true" 即可。他可以优化程序运行更平滑高效,在滚动和动画方面。
2.设置渲染模式,比如 LAYER_TYPE_HARDWARE 硬件加速和 LAYER_TYPE_SOFTWARE 使用 setLayerType() 方法.
3.渲染脚本对于3D图形方面大家可以看看Renderscript类
Android3.0 API变更概要:主要增加全息主题
1、Fragments:
较activity粒度小的拥有独自生命周期的模块。可作为acitivity的一部分,activity通过FragmentManager管理独自的fragments back stack。
Action Bar:
activity顶部标题栏的替代品,通常含logo,点击出现原menu菜单项--称作action item。可与tab、Fragments back stack合用。
3、粘贴版:
系统范围的复制、粘贴。通过系统服务CLIPBOARD_SERVICE。
4、Drag and drop:
在view中监听drag、drop动作,通过ClipData(与系统粘贴版无关)传递数据。
5、App widgets:支持GridView、ListView、StackView及ViewFlipper。
6、Content loader:
Loader类简化异步数据加载;CursorLoader简化ContentProvider的数据加载。
7、动画支持扩展:
全新动画框架,更灵活。
8、硬件绘制加速:
android:hardwareAccelerated="true" 启用OpenGl硬件绘制加速。支持renderscript脚本语言。
Android3.1 API变更概要:
1、USB API:
简化Android设备USB支持。
2、相机等PTP API:
增加多媒体MTP/PTP协议API。
3、增加输入设备及事件:
ACTION_HOVER_MOVE事件,非触控的SCROLL事件等。
4、新增RTP API:
增加实时传输协议栈中API。
5、App widget可改变大小:
android:resizeMode="horizontal|vertical"
Android3.2新增功能:
1、主要是屏幕大小适配支持。
Android4.0 API变更概要::将3.x的全息主题带到小屏幕,合并2.x与3.x
1、Contacts Provider中的社交API:
用户个人资料、大photo、使用情况反馈。
2、Calendar Provider:
提供获取、增加、修改、删除Calendar的API。
3、Voicemail及更好的多媒体效果。
4、相机的增强人脸识别功能。
5、NFC数据交换格式
通过NDEF(NFC数据交换格式)进行4cm左右的近距离数据交换。
6、支持带Wi-Fi Direct设备的P2P连接,传输距离较 Bluetooth远。
7、支持Bluetooth的健康设备可与Android通信;
app可实现拼写检查服务;Text-to-speech新API;
sdk>=14时默认启用硬件加速
8、支持温度、湿度传感器。
9、硬件不再必须有Menu键。
Android 4.1 API变更概要:提高性能、增强用户体验
隔离的服务:
android:isolatedProcess=“true”可设置服务运行在隔离的usrID的进程中。
2、内存警告:
更多内存使用状态常量。
3、增加调用Content provider的健壮性的容错。
App 栈导航:
通过设置android:parentActivityName改变回退栈的内容,如果栈中没有parentActivity,则合成栈,通过onPrepareNavigateUpTaskStack()改变parentActivity中的内容。
5、多媒体:
开放底层编解码接口、音频效果增强、相机自动对焦事件等。
6、网络连接:
支持大数据量bluetooth传输、多播设备发现、Wi-Fi Direct服务发现。
7、网络连接是否收费:
isActiveNetworkMetered(),判断当前使用的网络是否计量网络。
8、Activity启动动画:
通过ActivityOptions设置动画转化为Bundle,作为Intent属性启动activity。由一个activity的启动、另一个activity的停止两组动画组成。
9、通知栏支持3种新风格:
大图片、大字体、列表信息显示;支持通知底部两个action button;可设定通知优先级。
10、增加Roboto(4.0版本字体基础)字体变种。
11、增加外部存储读权限、电视设备属性
Android4.2 API变更概要:
导出设置:android:exported="true" :
Content provider默认不再有导出属性。也就是说,android:exported属性的默认值为"false"。如果别的应用能访问您的content provider对您意义重大,您必须显式的设置android:exported="true" 此更改仅在您设置targetSdkVersion或android:minSdkVersion为17或更高时生效。否则,即使运行在Android 4.2版本上时,默认值仍然是“true”。
定位精确度:ACCESS_COARSE_LOCATION//ACCESS_FINE_LOCATION
相对以前的版本的Android,如果您的应用程序请求了ACCESS_COARSE_LOCATION权限而没有请求ACCESS_FINE_LOCATION权限,用户定位的精度会有所下降。 为保护用户隐私,当您的应用仅请求了大概位置权限(而没有请求准确位置权限)时,系统提供的位置精度将小于一个街区。
3、设备设置变为了只读Settings.System
一些Settings.System中所定义的设备设置变为了只读。一些原先在Settings.System中现在移到了Settings.Global中。在Android 4.2或更高系统上,如果您的应用试图修改这些设置,操作将不起作用。 即便您的android:targetSdkVersion和android:minSdkVersion低于17,您的应用也无法在Android 4.2上修改已经移至Settings.Global中的设置项。
4、DreamService新型互动屏保模式
白日梦(DreamService)是Android设备的新型互动屏保模式。当设备置入底座或充电闲置状态时(屏幕没有关闭),此模式自动激活。白日梦模式每次显示一个,可以是纯粹的视觉效果,在用户触摸时消失,也可以是响应用户所有输入的交互式应用。您的白日梦将运行在您应用的进程内,并可以访问所有的Android UI工具包,可以使用视图、布局和动画等。所以它比动态壁纸或应用窗口小部件更具表现力。
您可以由实现DreamService的子类来创建一个白日梦。DreamService的API被设计成类似Activity。在通过诸如onAttachedToWindows()之类的方法获得窗口后,就可以给setContentView()设定一个布局资源ID或View,来为您的白日梦设置UI。
DreamService类在基础的Service API上添加了很多其它重要的生命周期回调方法。如onDreamingStarted()、onDreamingStopped()和onDetachedFromWindow()。您无法从您的应用中启动DreamService,它是由系统自动启动的。
如果您设计的是互动型的白日梦,您可以由白日梦将用户导入到您应用中的Activity中,以获得更详尽的内容和更多控制方法。您可以使用finish()来结束白日梦,之后用户就可以看到新的Activity。
为了使您的白日梦对系统可用,您需要在manifest文件中的元素下声明您的DreamService。然后,您必须在其中加入具有"android.service.dreams.DreamService"动作的intent filter。例如:
在DreamService中还有一些其它有用的方法需要留意:
setInteractive(boolean)用于设定您的白日梦在收到输入事件时是不是立刻退出。如果白日梦是交互式的,用户可以使用“后退”或“主页”按钮退出,或者您可以调用finish()来停止。
如果您想提供身临其境的显示,您可以调用setFullscreen()来隐藏状态栏。
白日梦开始之前,显示屏会渐暗以提示用户空闲超时时间接近。调用setScreenBright(true)则会去除这个过程。
欲了解更多信息,,请参阅DreamService文档。
5、辅助显示器Presentation
Android现在可以让您的应用在辅助显示器上显示不同的内容程序,以有线或Wi-Fi将外接显示输出连接到用户设备上,显示独特的内容。要为辅助显示屏创建独特的内容,您需要扩展Presentation类,并实现onCreate()回调方法。在onCreate()中,调用setContentView()来指定您要在辅助显示屏上显示的UI。作为Dialog类的扩展,Presentation类提供了一个区域,在其中,您的应用可以在辅助显示屏上显示不同的UI。
为了获取显示Presentation的辅助显示屏,您可以使用DisplayManager或者MediaRouter的API。其中,使用DisplayManager API可以使您获得当前连接的所有显示屏的枚举,而MediaRouter则可以使您直接访问系统为Presentation设置的默认显示输出。
您可以给MediaRouter.getSelectedRoute()传一个ROUTE_TYPE_LIVE_VIDEO来获得演示的默认显示器。它将返回一个MediaRouter.RouteInfo对象,描述了系统为视频演示所选择的当前路由。如果MediaRouter.RouteInfo不空,调用getPresentationDisplay()即可获取当前连接的显示屏对象:Display。
然后,您可以将这个Display对象传入Presentation的构造函数。演示就会出现在辅助显示屏上了。
为在运行时即时检测新接入的显示器,需要先创建一个MediaRouter.SimpleCallback的实例。在其中,您需要实现onRoutePresentationDisplayChanged()回调方法。当新的显示器连接时,系统会调用这个回调方法。然后将MediaRouter.SimpleCallback加上ROUTE_TYPE_LIVE_VIDEO路由类型传递给MediaRoute.addCallback()来进行注册。当收到onRoutePresentationDisplayChanged()回调时,只要如上所述的调用MediaRouter.getSelectedRoute()即可。
为针对辅助显示进一步优化Presentation的UI,您需要为您的应用或activity指定标签为android:presentationTheme主题。
请留意,连接到用户移动设备的屏幕往往有较大的屏幕尺寸和不同的屏幕密度。由于屏幕特征可能不同,您需要为大型显示设备提供特定优化的资源。如果您需要从Presentation中获取额外的资源,调用getContext().getResources()来获取针对这种显示的资源对象。这样,您的应用就可以根据辅助显示器的尺寸和密度提供最合适的资源了。
欲了解更多信息以及一些代码示例,请参阅Presentation类文档。
6、锁屏小部件AppWidgetProviderInfo
Android现在允许用户添加应用窗口小部件至锁屏界面。为了使您应用程序的窗口小部件可用于在锁屏,您需要在指定了AppWidgetProviderInfo的XML文件中加入android:widgetCategory属性。此属性支持两个取值:home_screen和keyguard。默认情况下,属性设置为home_screen,由此用户可以添加应用的窗口小部件到主屏幕。如果您希望应用的窗口小部件同样支持锁屏,则加入keyguard取值:
您应该用android:initialKeyguardLayout属性来为您的应用窗口小部件指定一个锁屏显示初始化布局。它作用的方式与android:initialLayout相同:先立刻在屏幕上显示一个布局,当应用窗口小部件初始化完毕后,再对布局进行更新。
欲了解更多关于锁屏窗口小部件的信息,包括如何为您的应用小部件设置适合的尺寸,请参阅应用程序部件指南。
7、多用户
Android现在允许平板等可共享的设备,拥有多个用户空间。设备上的每个用户都有他或她自己的帐户、应用程序、系统设置、文件,以及任何其他用户相关的数据集。
作为应用程序开发人员,您毋须为多用户模式做任何额外工作。不管设备上有多少用户,特定用户所用的应用数据都是跟其它用户分开的。系统会跟踪用户运行的应用数据的归属,并限定您的应用仅能访问所属用户的数据,而无法访问其它用户的数据。
多用户环境中的数据保存
当您的应用程序保存用户喜好,创建数据库,或向用户的内部或外部存储空间写入文件时,这些数据仅能被当前运行此应用的用户所访问。
为确保您的应用在多用户环境中表现正常,请不要对应用内的路径或外部存储路径使用硬编码路径,而是要使用相应的API。
访问内部存储时,使用getFilesDir()、getCacheDir()、和openFileOutput()方法。
访问外部存储时,使用getExternalFilesDir()或getExternalStoragePublicDirectory()。
无论您使用这些API中的哪个,它们保存的数据都无法被其它用户访问。从应用程序的角度来看,每个用户都运行在完全独立的设备上。
多用户环境中的用户识别
如果您的应用要区分用户以进行搜集分析或创建其他帐户联系,您都应当以下遵循建议方法来进行识别。无论有多少用户在设备上安装了您的应用,您的应用在首次运行时都要生成唯一的UUID,您可以用这ID来对每个用户进行甄别。或者,您也可以保存从您的服务器获取的本地令牌或由谷歌云消息服务所提供的注册ID来进行甄别。
要注意的是,如果您的应用使用硬件设备标识符(如WiFi的MAC地址,序列号,或ANDROID_ID数),它们会为每个用户提供相同的值,因为这些标识符依赖的硬件,而不是用户。更不用说使用这些标识符还会引起各种各样的其它问题。
8、新的“全局设置”
系统设置已经为支持多用户作了更新,添加了Settings.Global类。这一系列设置与Settings.Secure设置类似,也是只读的,但对于设备上的所有用户空间生效。
很多原来位于Settings.System和Settings.Secure的设置移到了这里。如果您应用对曾经在Settings.System中定义的设置(比如AIRPLANE_MODE_ON)进行过更改的话,那么您就应该想到,在Android 4.2和更高版本的设备上,这些设置已经移至Settings.Global,从而您的代码不会再起作用了。您仍然可以由Settings.Global中读取设置,但在Android 4.2和更高的版本中,因为觉得这些设置不应当被应用修改,所以所有的修改操作将不被执行,并在系统日志中记下一条警告记录。
9、RTL布局支持
Android现在提供了一些API,使您可以构建更优雅的变换布局方向的用户界面。这些界面将支持由右到左(RTL)的语言和阅读方向。比如阿拉伯语和希伯来语。
为了使您的应用支持RTL布局,需要在manifest文件中设置元素的android:supportsRtl属性为“true”。一旦启用,该系统将启用各种RTL API来用RTL布局显示您的应用。举例来说,在操作栏中将操作按钮显示在左侧,而把图标和标题显示在右侧。所有您用框架提供的View类所构建的布局也会以相反的方向显示。
如果您需要在显示RTL布局时进一步优化您应用的外观,有两个基本层面的优化:
将左——右方向的布局属性转变为开始——结束方向的布局属性。 例如,用android:layout_marginStart替换android:layout_marginLeft,用android:layout_marginEnd替换android:layout_marginRight。
RelativeLayout类也提供了相应的布局属性,来替换左/右位置,如:android:layout_alignParentStart替换android:layout_alignParentLeft,用android:layout_toStartOf替换android:layout_toLeftOf。
或者,使用ldrtl资源限定词(ldrtl意味着布局方向由右至左)资源提供完整的针对RTL布局优化过的布局文件。例如,您可以在res/layout/目录保存您默认的配置文件,而在res/layout-ldrtl/目录下保存您针对RTL优化过的布局。
ldrtl限定词对drawable资源也很适用,这样您就可以提供与阅读方向相同的图片了。
框架中还有各种其它的支持RTL布局的API,比如,在View类中,您可以在定制的view中实现适当的行为;在Configuration类中,可以查询当前的布局方向。
注意:如果您用SQLite而表名或列名使用了“仅允许数字”特性。请小心:当您的设备设置为阿拉伯地区,使用String.format(String, Object...) 方法时会因为数字转换成对应的阿拉伯文而导致错误。您必须使用String.format(Locale,String,Object...),以确保数字以ASCII的编码保存。还可以使用String.format("%d", int)来取代String.valueOf(int)以格式化数字。
10、嵌套Fragment
现在,您可以嵌套Fragement到Fragment中。当您遇到想在一个可复用的动态UI组件里放入另一个可复用的UI组件时,这个方案就非常有用。例如,如果您用ViewPager做了个可左右滑动的Fragment,并占用了大部分屏幕空间,您可以在其中的每个fragment页面中嵌入别的fragment了。
想要实现嵌套Fragment,只需在您想进行嵌入的Fragment中调用getChildFragmentManager() 方法。这样会返回一个FragmentManager,然后您就可以用和在顶层的Acitivity中嵌入fragment一样的方法进行操作了。例如,以下代码在一个现有的Fragment类中加上了另一个Fragment:
Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();
在嵌套的fragment中,您可以通过调用getParentFragment()方法来获取父fragment的引用。
Android支持库现在也加入了嵌套Fragment支持,因此在Android 1.6及更高版本上,您都可以使用嵌套fragment来进行设计。
注意:不能在fragment中导入一个包含标签的布局文件。嵌套fragment仅支持动态加入fragment。