Android 6.0特性变更
1. 新的运行时权限
android 6.0引入了全新的运行时权限管理模式,用户可以直接在运行时管理应用权限。对于开发者来讲,如果你的应用以android 6.0或者更高级别为目标平台,需要检查并且申请权限。
2. 运行时权限的分类
这里顺便介绍一下android的权限划分,android将权限分为不同的类型,包括安装时权限、运行时权限和特殊权限,每种权限类型都指明了当系统授予应用该权限后,应用可以访问的受限数据范围以及应用可以执行的受限操作范围。
安装时权限授予应用对受限数据的受限访问权限,并允许应用执行对系统或其他应用只有最低影响的受限操作。如果您在应用中声明了安装时权限,系统会在用户安装您的应用时自动授予应用相应权限。安装时权限又分为两类:普通权限和签名权限,普通权限就是我们目前比较常用的一些风险比较低的权限,比如网络权限,这类权限一般都是在清单文件中直接声明就可以了,不需要额外申请。系统会为普通权限标记“normal”的访问级别。签名权限,当应用声明了其他应用已定义的签名权限时,如果两个应用使用同一证书进行签名,系统会在安装时向前者授予该权限。否则,系统无法向前者授予该权限。系统为签名权限标记“signature”的方位级别。
运行时权限也称为危险权限,这类权限授予应用对受限数据的额外访问权限,并允许应用执行对系统和其他应用数据更具影响的操作,所以应用需要在运行时单独申请运行时权限,并且获得用户许可之后才能访问受限数据或者执行受限操作。系统为运行时权限标记“dangerous”的访问级别。
特殊权限对应特定的应用操作,只有平台和设备商可以定义特殊权限。系统为特殊权限标记“appop”的访问级别。
android权限级别:.
normal:低风险级别,应用只要在AndroidManifest.xml注册了就可以使用。
dangerous:高风险级别,不光要在AndroidManifest.xml中注册,同时还要弹出权限申请框经用户同意之后才能使用。
signature:签名权限一般使用该级别标记,当申请权限的数字签名与声明权限的数字签名相同时才能授予相关权限。
signatureOrSystem:签名相同或者申请权限的应用为系统应用时才会授予相关权限。
3. 低耗电模式和应用待机模式
低耗电模式如果设备没有在充电,并且关闭屏幕持续一段时间,这时候设备会进入低耗电模式。该模式下设备会尝试使系统进入休眠状态,并且会短时恢复正常工作,以便让应用进行同步操作,同时一些应用会进入挂起状态。
应用待机模式一个应用如果长时间没有被用户触摸操作,便会进入待机状态,如果此时设备没有处于充电状态,改应用会被暂停网络和同步操作。
4. 取消支持 Apache HTTP 客户端
android6.0之前的系统网络请求都是基于HttpClient进行的,从6.0开始将取消对HttpClient的支持,并且改用HttpUrlConnection。HttpUrlConnection可以通过透明压缩和响应缓存减少网络资源的使用量,并且降低耗电。如果要继续使用HttpClient,请在build.gradle文件中添加以下配置:
android {
useLibrary 'org.apache.http.legacy'
}
5. 修改硬件标识符访问权限
android6.0更改了部分硬件标识符访问权,如果您的应用需要访问WiFi和蓝牙,调用wifiinfo.getMacAddress()和BluetoothAdapter.getAddress()方法将会返回一个固定的常量值 02:00:00:00:00:00。并且通过WiFi或者蓝牙访问外部设备的硬件标识符时,应用必须有 ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 权限。
6. 通知
android6.0取消了Notification.setLatestEventInfo()方法,改用Notification.Builder构建通知。此外,adb shell dumpsys notification
不在打印输出通知中的文本内容,改用adb shell dumpsys notification --noredact
命令。
7. 音频管理器变更
不再支持通过AudioManager 类直接设置音量或将特定音频流静音。setStreamSolo() 方法已弃用,您应该改为调用 requestAudioFocus() 方法。类似地,setStreamMute() 方法也已弃用,请改为调用 adjustStreamVolume() 方法并传入方向值 ADJUST_MUTE 或 ADJUST_UNMUTE
8. 浏览器书签变更
此版本移除了对全局书签的支持。android.provider.Browser.getAllBookmarks() 和 android.provider.Browser.saveBookmark() 方法现已移除。同样,READ_HISTORY_BOOKMARKS 权限和 WRITE_HISTORY_BOOKMARKS 权限也已移除。如果您的应用以 Android 6.0(API 级别 23)或更高版本为目标平台,请勿从全局提供程序访问书签或使用书签权限。您的应用应改为在内部存储书签数据。
9. 秘钥库变更
Android 密钥库提供程序不再支持 DSA。但仍支持 ECDSA。
10. wlan和网络连接变更
- 从6.0开始您的应用只能更改由您创建的 WifiConfiguration 对象的状态。系统不允许您修改或删除由用户或其他应用创建的 WifiConfiguration 对象。
- 在之前的版本中,如果应用利用带有 disableAllOthers=true 设置的 enableNetwork() 强制设备连接特定 WLAN 网络,设备将会断开与移动数据网络等其他网络的连接。在此版本中,设备不再断开与上述其他网络的连接。如果您的应用的 targetSdkVersion 为 “20” 或更低,则会固定连接所选 WLAN 网络。如果您的应用的 targetSdkVersion 为 “21” 或更高,请使用多网络 API(如 openConnection()、bindSocket() 和新增的 bindProcessToNetwork() 方法)来确保通过所选网络传送网络流量。
11. 相机服务变更
- 相机服务中共享资源的访问模式已从之前的“先到先得”访问模式更改为高优先级进程优先的访问模式,也就是说,优先级高的应用更加容易获取相机的使用权,并且高优先级的应用可能会将正在使用相机的低优先级应用挤下去以此获取相机的使用权。导致系统为被挤兑的客户端调用 onDisconnected()方法。
- 多进程用例同时访问相机会导致设备性能下降,6.0以开始系统将禁止这种情况。
12. USB验证
默认情况下,现在通过 USB 端口进行的设备连接设置为仅充电模式。要通过 USB 连接访问设备及其内容,用户必须明确地为此类交互授予权限。如果您的应用支持用户通过 USB 端口与设备进行交互,请将必须显式启用交互考虑在内。
共同学习,写下你的评论
评论加载中...
作者其他优质文章