Android 6.0 Marshmallow介绍

蹉跎莫遣韶光老,人生唯有读书好。这篇文章主要讲述Android 6.0 Marshmallow介绍相关的知识,希望能为你提供帮助。
Android  6.0 Marshmallow介绍android 6.0 (M) 为用户和应用开发者提供了新功能。本文旨在介绍其中最值得关注的 API和重点介绍您应该了解并在开发应用时加以考虑的一些主要变更。
1、Android  6.0新增功能与特性 指纹身份验证:此版本提供了一些新的 API,在受支持的设备上,用户只需扫描其指纹即可完成身份验证,这些 API 还可与  Android 密钥库系统结合使用。
要通过指纹扫描验证用户身份,请获取新  FingerprintManager  类的实例,并调用  authenticate()方法。您的应用必须运行在带有指纹传感器的兼容设备上。您必须在应用中实现指纹身份验证流的用户界面,并在 UI 中使用标准 Android 指纹图标。FingerprintDialog 示例中包含有 Android 指纹图标 (c_fp_40px.png)。请注意,如果您要开发多个使用指纹身份验证的应用,每个应用必须独立验证用户的指纹。
要在您的应用中使用此功能,请先在清单中添加  USE_FINGERPRINT  权限。
< uses-permission
        android:name="android.permission.USE_FINGERPRINT"  />
如果您要测试此功能,请执行以下步骤:
1、如果您尚未安装 Android SDK 工具 24.3 修订版,请执行此操作。
2、转到  Settings > Security > Fingerprint,然后按照登记说明在模拟器中登记新指纹。
3、使用模拟器通过以下命令模拟指纹触摸事件。使用同一命令模拟锁屏上或应用中的指纹触摸事件。
adb -e emu finger touch < finger_id>
在 Windows 上,您可能需要运行带有finger touch < finger_id> 参数的telnet 127.0.0.1 < emulator-id> 命令。
确认凭据:您的应用可以根据用户在多久之前最后一次解锁设备来验证其身份。此功能让用户不必费心记忆应用特定密码,您也无需实现自己的身份验证用户界面。您的应用应当利用此功能并结合实现公钥或私钥,以进行用户身份验证。
要设置成功验证用户身份后可再次使用同一密钥的超时持续时间,请在设置KeyGenerator和KeyPairGenerator时调用新的setUserAuthenticationValidit  yDurationSeconds()方法。
避免过多显示重新验证对话框 -- 您的应用应尝试先使用加密对象,如果超时到期,请使用createConfirmDeviceCredentialIntent()方法在您的应用内重新验证用户身份。
应用链接:此版本通过提供功能更强大的应用链接,增强了 Android 的 intent 系统。您可以利用此功能将应用与您拥有的某个 Web 域关联。平台可以根据此关联确定在处理特定 Web 链接时默认使用的应用,跳过提示用户选择应用的步骤。
实现参考:https://developer.android.com/training/app-links/index.html
自动备份应用:现在,系统可以自动为应用执行完整数据备份和恢复。您的应用的目标平台必须是 Android 6.0(API 级别 23),才能启用此行为;您无需额外添加任何代码。如果用户删除其 Google 帐户,其备份数据也会随之删除。
要了解该功能的工作方式以及配置文件系统备份内容的方法:https://developer.android.com/guide/topics/data/autobackup.html
直接共享:此版本为您提供的一些 API 可让用户直观、快捷地进行共享。现在,您可以定义可在您的应用内启动特定 Activity 的直接共享目标。这些直接共享目标通过“共享”菜单公开给用户。此功能让用户可以向其他应用内的目标(如联系人)共享内容。例如,直接共享目标可以启动另一社交网络应用中的某个 Activity,让用户可以直接向该应用中的某位朋友或某个社区共享内容。
要启用直接共享目标,您必须定义一个类,用于扩展  ChooserTargetService  类。在清单中声明您的服务。在该声明内,指定  BIND_CHOOSER_TARGET_SERVICE  权限和一个使用  SERVICE_INTERFACE操作的 intent 过滤器。
以下示例展示了如何在清单中声明  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,请在您的应用清单中为其添加一个名为"android.service.chooser.chooser_target_service  "的< meta-data> 元素。
< 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="https://www.songbingjia.com/android/.ChooserTargetService"  />
< /activity>
语音交互:此版本提供了一个新的语音交互 API,与语音操作一起使用时,可让您为应用打造对话式语音体验。调用isVoiceInteraction()方法可确定是否是响应语音操作触发了您的Activity。如果是这样,则您的应用可以使用VoiceInteractor类请求用户进行语音确认、从选项列表中进行选择以及执行其他操作。
大多数语音交互都由用户语音操作发起。但语音交互Activity也可在没有用户输入的情况下启动。例如,通过语音交互启动的另一应用也可发送intent来启动语音交互。要确定您的Activity是由用户语音查询还是另一语音交互应用启动,请调用isVoiceInteractionRoot()方法。如果另一应用启动了您的 Activity,该方法会返回false。您的应用可能随即提示用户确认其有意执行此操作。
Assist API:此版本提供了一种让用户通过助手程序与应用进行互动的新方式。要使用此功能,用户必须启用助手以使用当前上下文。启用助手后,用户可通过长按首页按钮在任何应用内召唤助手。
您的应用可通过设置  FLAG_SECURE  标记选择不与助手共享当前上下文。除了平台传递给助手的一组标准信息外,您的应用还可利用新增的  AssistContent类共享其他信息。
要为助手提供您的应用内的其他上下文,请执行以下步骤:
1、实现  Application.OnProvideAssistDataListener  接口。
2、利用  registerOnProvideAssistDataListener()  注册此侦听器。
3、要提供特定于 Activity 的上下文信息,请重写onProvideAssistData()回调和新的onProvideAssistContent()回调(可选操作)。
可采用的存储设备:使用此版本时,用户可以采用  SD 卡等外部存储设备。采用外部存储设备可加密和格式化设备,使其具有类似内部存储设备的行为。用户可以利用此特性在存储设备之间移动应用及其私有数据。移动应用时,系统会遵守清单中的android:installLocation首选项。
请注意,在内部存储设备与外部存储设备之间移动应用时,如果您的应用访问以下API或字段,它们返回的文件路径将会动态变化。强烈建议:在生成文件路径时,请始终动态调用这些API。请勿使用硬编码文件路径或之前生成的永久性完全限定文件路径。
通知:此版本针对通知功能引入了下列 API 变更:
1.新增了  INTERRUPTION_FILTER_ALARMS  过滤级别,它对应于新增的“仅闹铃”免打扰模式。
2.新增了  CATEGORY_REMINDER  类别值,用于区分用户安排的提醒与其他事件 (CATEGORY_EVENT) 和闹铃 (CATEGORY_ALARM)。
3.新增了  Icon  类,您可以通过  setSmallIcon()方法和setLargeIcon()方法将其附加到通知上。同理,addAction()方法现在接受Icon对象,而不接受可绘制资源ID。
4.新增了  getActiveNotifications()  方法,让您的应用能够了解哪些通知目前处于活动状态。要查看使用此功能的应用实现,请参阅ActiveNotifications示例。
蓝牙触控笔支持:此版本改善了对用户使用蓝牙触控笔进行输入的支持。用户可将兼容的蓝牙触控笔与其手机或平板电脑配对并建立连接。连接后,来自触摸屏的位置信息将与来自触控笔的压力和按键信息融合,从而实现比单纯使用触摸屏更丰富的表达。您的应用可以通过在 Activity 中注册  View.OnContextClickListener对象和  GestureDetector.OnContextClickListener  对象,侦听触控笔按键动作并执行辅助操作。
可使用  MotionEvent  方法和常量来检测触控笔按键交互:
1.如果用户使用带按键的触控笔触按应用屏幕,getTooltype()方法会返回TOOL_TYPE_STYLUS。
2.对于以Android 6.0(API 级别 23)为目标平台的应用,当用户按触控笔的主按键时,getButtonState()方法会返回BUTTON_STYLUS_PRIMARY。如果触控笔有辅助按键,当用户按下它时,该方法会返回BUTTON_STYLUS_SECONDARY。如果用户同时按下两个按键,该方法会同时返回通过OR 运算符连接起来的两个值(BUTTON_STYLUS_PRIMARY|BUTTON_STYL  US_SECONDARY)。
3.对于以较低平台版本为目标的应用,getButtonState()方法返回BUTTON_SECONDARY(按下触控笔主按键时)、BUTTON_TERTIARY(按下触控笔辅助按键时)之一或同时返回这两者。
改进的蓝牙低功耗扫描:如果您的应用执行蓝牙低功耗扫描,可以使用新增的setCallbackType()方法指定您只希望在下列条件下通知回调:首次找到与设置的ScanFilter匹配的播发数据包,或者已过很长时间后才再次看到该数据包。这种扫描方法与旧平台版本中提供的方法相比更加节能。
Hotspot 2.0 第 1 版支持:此版本在 Nexus 6 和 Nexus 9 设备上添加了对 Hotspot 2.0 第 1 版规范的支持。要在您的应用中配置 Hotspot 2.0 凭据,请使用WifiEnterpriseConfig类的新方法,如setPlmn()方法和setRealm()方法。在WifiConfiguration对象中,您可以设置FQDN字段和providerFriendlyName字段。新增的isPasspointNetwork()方法可指示检测到的网络是否为Hotspot 2.0接入点。
4K 显示模式:现在,平台允许应用在兼容硬件上请求将显示分辨率升级到 4K 渲染。要查询当前物理分辨率,请使用新增的  Display.Mode  API。请注意,如果 UI 是以较低逻辑分辨率绘制并通过放大达到更高的物理分辨率,则  getPhysicalWidth()  方法返回的物理分辨率可能不同于  getSize()  所报告的逻辑分辨率。
您可以通过设置应用窗口的  preferredDisplayModeId  属性请求系统更改应用运行时的物理分辨率。如果您想切换到 4K 显示分辨率,此功能会很有帮助。在 4K 显示模式下,UI 仍然以原始分辨率(如 1080p)渲染,通过放大达到 4K,但  SurfaceView  对象可能会以原生分辨率显示内容。
 
主题化 ColorStateList:对于运行 Android 6.0(API 级别 23)的设备,现在支持在ColorStateList中使用主题属性。Resources.getColorStateList()方法和Resources.getColor()方法已弃用。如果您要调用这些 API,请改为调用新增的Context.getColorStateList()方法或Context.getColor()方法。还可在v4 appcompat库中通过ContextCompat使用这些方法。
音频功能:此版本增强了 Android 上的音频处理功能,包括:
1.通过新增的  android.media.midi  API 提供了对  MIDI  协议的支持。使用这些 API 可发送和接收 MIDI 事件。
2.新增了AudioRecord.Builder类和AudioTrack.Builder类,分别用于创建数字音频采集和回放对象,还可用于配置音频源和接收器属性来替换系统默认值。
【Android 6.0 Marshmallow介绍】3.用于关联音频和输入设备的 API 钩子。如果您的应用允许用户通过与 Android TV相连的游戏控制器或遥控器启动语音搜索,此功能尤为有用。系统会在用户启动搜索时调用新增的onSearchRequested()回调。要确定用户的输入设备是否内置麦克风,请从该回调检索InputDevice对象,然后调用新的hasMicrophone()方法。
4.新增了getDevices()方法,让您可以检索系统当前连接的所有音频设备的列表。如果您想让系统在音频设备连接或断开时通知应用,还可以注册一个AudioDeviceCallback对象
视频功能:此版本为视频处理 API 添加了新功能,包括:
1.新增了  MediaSync  类,可帮助应用同步渲染音频流和视频流。音频缓冲区以非锁定方式提交,并通过回调返回。此外,它还支持动态回放速率。
2.新增了  EVENT_SESSION_RECLAIMED  事件,它表示应用打开的会话已被资源管理器收回。如果您的应用使用 DRM 会话,则应处理此事件,并确保不使用收回的会话。
3.新增了  ERROR_RECLAIMED  错误代码,它表示资源管理器收回了编解码器使用的媒体资源。出现此异常时,必须释放编解码器,因为它已转入终止状态。
4.新增了  getMaxSupportedInstances()  接口,用于获取有关支持的编解码器实例最大并发数量的提示。
5.新增了  setPlaybackParams()  方法,用于设置快动作回放或慢动作回放的媒体回放速率。此外,它还会随视频一起自动拉长或加速音频回放
2、Android  6.0 变更 运行时权限:此版本引入了一种新的权限模式,如今,用户可直接在运行时管理应用权限。这种模式让用户能够更好地了解和控制权限,同时为应用开发者精简了安装和自动更新过程。用户可为所安装的各个应用分别授予或撤销权限。
对于以 Android 6.0(API 级别 23)或更高版本为目标平台的应用,请务必在运行时检查和请求权限。要确定您的应用是否已被授予权限,请调用新增的checkSelfPermission()方法。要请求权限,请调用新增的requestPermissions()方法。即使您的应用并不以 Android 6.0(API 级别 23)为目标平台,您也应该在新权限模式下测试您的应用。
低电耗模式和应用待机模式:此版本引入了针对空闲设备和应用的最新节能优化技术。这些功能会影响所有应用,因此请务必在这些新模式下测试您的应用。
1、低电耗模式:如果用户拔下设备的电源插头,并在屏幕关闭后的一段时间内使其保持不活动状态,设备会进入低电耗模式,在该模式下设备会尝试让系统保持休眠状态。在该模式下,设备会定期短时间恢复正常工作,以便进行应用同步,还可让系统执行任何挂起的操作。
2、应用待机模式:应用待机模式允许系统判定应用在用户未主动使用它时处于空闲状态。当用户有一段时间未触摸应用时,系统便会作出此判定。如果拔下了设备电源插头,系统会为其视为空闲的应用停用网络访问以及暂停同步和作业。
  取消支持 Apache HTTP 客户端:Android 6.0 版移除了对 Apache HTTP 客户端的支持。如果您的应用使用该客户端,并以 Android 2.3(API 级别 9)或更高版本为目标平台,请改用  HttpURLConnection  类。此 API 效率更高,因为它可以通过透明压缩和响应缓存减少网络使用,并可最大限度降低耗电量。要继续使用 Apache HTTP API,您必须先在  build.gradle  文件中声明以下编译时依赖项:
android {
    useLibrary ‘org.apache.http.legacy‘
}
BoringSSL:Android 正在从使用 OpenSSL 库转向使用  BoringSSL  库。如果您要在应用中使用 Android NDK,请勿链接到并非 NDK API 组成部分的加密库,如  libcrypto.so  和  libssl.so。这些库并非公共 API,可能会在不同版本和设备上毫无征兆地发生变化或出现故障。此外,您还可能让自己暴露在安全漏洞的风险之下。请改为修改原生代码,以通过 JNI 调用 java 加密 API,或静态链接到您选择的加密库。
硬件标识符访问权:为给用户提供更严格的数据保护,从此版本开始,对于使用 WLAN API 和 Bluetooth API 的应用,Android 移除了对设备本地硬件标识符的编程访问权。WifiInfo.getMacAddress()方法和BluetoothAdapter.getAddress()方法现在会返回常量值02:00:00:00:00:00。
现在,要通过蓝牙和 WLAN 扫描访问附近外部设备的硬件标识符,您的应用必须拥有ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION权限。
1.WifiManager.getScanResults()
2.BluetoothDevice.ACTION_FOUND
3.BluetoothLeScanner.startScan()
注:当运行 Android 6.0(API 级别 23)的设备发起后台 WLAN 或蓝牙扫描时,在外部设备看来,该操作的发起来源是一个随机化 MAC 地址。
通知:此版本移除了Notification.setLatestEventInfo()方法。请改用Notification.Builder类来构建通知。要重复更新通知,请重复使用Notification.Builder实例。调用build()方法可获取更新后的Notification实例。
adb shell dumpsys notification命令不再打印输出您的通知文本。请改用adb shell dumpsys notification --noredact命令打印输出notification对象中的文本。
音频管理器变更:不再支持通过AudioManager类直接设置音量或将特定音频流静音。setStreamSolo()方法已弃用,您应该改为调用requestAudioFocus()方法。类似地,setStreamMute()方法也已弃用,请改为调用adjustStreamVolume()方法并传入方向值ADJUST_MUTE或ADJUST_UNMUTE。
文本选择:现在,当用户在您的应用中选择文本时,您可以在一个浮动工具栏中显示“剪切”、“复制”和“粘贴”等文本选择操作。其在用户交互实现上与为单个视图启用上下文操作模式中所述的上下文操作栏类似。
要实现可用于文本选择的浮动工具栏,请在您的现有应用中做出以下更改:
在  View  对象或  Activity  对象中,将  ActionMode  调用从startAc  tionMode(Callback)更改为startActionMode(Callback, ActionMode.TYPE  _FLOATING)。
改为使用  ActionMode.Callback  的现有实现扩ActionMode.Callback2。
替代onGetContentRect()方法,用于提供Rect内容对象(如文本选择矩形)在视图中的坐标。
如果矩形的定位不再有效,并且这是唯一需要声明为无效的元素,请调用invalidateContentRect()方法。
请注意,如果您使用Android 支持库  22.2 修订版,浮动工具栏不向后兼容,默认情况下appcompat会获得对ActionMode对象的控制权。这会禁止显示浮动工具栏。要在ActionMode中启用AppCompatActivity支持,请调用getDelegate(),然后对返回的  setHandleNativeActionModesEnabled()对象调用AppCompatDelegate,并将输入参数设置为  false。此调用会将ActionMode对象的控制权交还给框架。在运行 Android 6.0(API 级别 23)的设备上,框架可以支持  ActionBar  模式或浮动工具栏模式;而在运行 Android 5.1(API 级别 22)或之前版本的设备上,框架仅支持  ActionBar  模式。
浏览器书签变更:此版本移除了对全局书签的支持。android.provider.Browser.getAllBoo  kmarks()和android.provider.Browser.saveBookmark()方法现已移除。同样,READ_HISTORY_BOOKMARKS权限和WRITE_HISTORY_BOOKMARKS权限也已移除。如果您的应用以Android 6.0(API 级别 23)或更高版本为目标平台,请勿从全局提供程序访问书签或使用书签权限。您的应用应改为在内部存储书签数据。
浏览器书签变更:此版本移除了对全局书签的支持。android.provider.Browser.getAllBookm  arks()和android.provider.Browser.saveBookmark()方法现已移除。同样,READ_HISTORY_BOOKMARKS权限和WRITE_HISTORY_BOOKMARKS权限也已移除。如果您的应用以Android 6.0(API 级别 23)或更高版本为目标平台,请勿从全局提供程序访问书签或使用书签权限。您的应用应改为在内部存储书签数据。
Android 密钥库变更:从此版本开始,Android 密钥库提供程序不再支持 DSA。但仍支持 ECDSA。
停用或重置安全锁定屏幕时(例如,由用户或设备管理员执行此类操作时),系统将不再删除需要闲时加密的密钥,但在上述事件期间会删除需要闲时加密的密钥。
 
WLAN 和网络连接变更:此版本对 WLAN API 和 Networking API 引入了以下行为变更。
1.现在,您的应用只能更改由您创建的  WifiConfiguration  对象的状态。系统不允许您修改或删除由用户或其他应用创建的  WifiConfiguration  对象。
2.在之前的版本中,如果应用利用带有disableAllOthers=true设置的enableNetwork()强制设备连接特定 WLAN 网络,设备将会断开与移动数据网络等其他网络的连接。在此版本中,设备不再断开与上述其他网络的连接。如果您的应用的targetSdkVersion为“20”或更低,则会固定连接所选 WLAN 网络。如果您的应用的targetSdkVersion为“21”或更高,请使用多网络API(如openConnection()、bindSocket()和新增的bindProcessToNetwork()方法)来确保通过所选网络传送网络流量。
运行时:ART 运行时环境现在可正确实现  newInstance()  方法的访问规则。此变更修正了之前版本中 Dalvik 无法正确检查访问规则的问题。如果您的应用使用  newInstance()  方法,并且您想重写访问检查,请调用  setAccessible()  方法(将输入参数设置为  true)。如果您的应用使用  v7 appcompat 库或  v7 recyclerview 库,则您必须更新应用以使用这些库的最新版本。否则,请务必更新从 XML 引用的任何自定义类,以便能够访问它们的类构造函数。
此版本更新了动态链接程序的行为。动态链接程序现在可以识别库的  soname  与其路径之间的差异(公开错误 6670),并且现在已实现了按  soname  搜索。之前包含错误的  DT_NEEDED  条目(通常是开发计算机文件系统上的绝对路径)却仍工作正常的应用,如今可能会出现加载失败。
现已正确实现  dlopen(3) RTLD_LOCAL  标记。请注意,RTLD_LOCAL  是默认值,因此不显式使用  RTLD_LOCAL  的  dlopen(3)  调用将受到影响(除非您的应用显式使用  RTLD_GLOBAL)。使用  RTLD_LOCAL  时,在随后通过调用  dlopen(3)  加载的库中并不能使用这些符号(这与由  DT_NEEDED  条目引用的情况截然不同)。
在之前版本的 Android 上,如果您的应用请求系统加载包含文本重定位信息的共享库,系统会显示警告,但仍允许加载共享库。从此版本开始,如果您的应用的目标 SDK 版本为 23 或更高,则系统会拒绝加载该库。为帮助您检测库是否加载失败,您的应用应该记录  dlopen(3)  失败日志,并在日志中加入  dlerror(3)  调用返回的问题描述文本。
APK 验证:该平台现在执行的 APK 验证更为严格。如果在清单中声明的文件在 APK 中并不存在,该 APK 将被视为已损坏。移除任何内容后必须重新签署 APK。
Android for Work 变更:此版本包含下列针对 Android for Work 的行为变更:
1、个人上下文中的工作联系人。Google 拨号器通话记录现在会在用户查看通话记录时显示工作联系人。将  setCrossProfileCallerIdDisabled()  设置为  true  可在 Google 拨号器通话记录中隐藏托管配置文件联系人。仅当您将  setBluetoothContactSharingDisabled()  设置为  false  时,才可以通过蓝牙将工作联系人随个人联系人一起显示给设备。默认情况下,它设置为  true。
2、WLAN 配置删除:现在,当删除某个托管配置文件时,将会移除由配置文件所有者添加的 WLAN 配置(例如,通过调用  addNetwork()  方法添加的配置)。
3、WLAN 配置锁定:如果  WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN  不为零,则用户无法再修改或删除任何由活动设备所有者创建的 WLAN 配置。用户仍可创建和修改其自己的 WLAN 配置。活动设备所有者拥有编辑或删除任何 WLAN 配置(包括并非由其创建的配置)的权限。
4、通过添加 Google 帐户下载设备规范控制器:向托管环境以外的设备添加需要通过设备规范控制器 (DPC) 应用管理的 Google 帐户时,帐户添加流程现在会提示用户安装相应的 WPC。在设备初始设置向导中通过  Settings > Accounts  添加帐户时,也会出现此行为。
5、对特定  DevicePolicyManager  API 行为的变更:
5.1、调用  setCameraDisabled()  方法只会影响调用该方法的用户的相机;从托管配置文件调用它不会影响主用户运行的相机应用。
5.2、此外,setKeyguardDisabledFeatures()  方法现在除了可供设备所有者使用外,还可供配置文件所有者使用。
5.3配置文件所有者可设置以下键盘锁限制:
KEYGUARD_DISABLE_TRUST_AGENTS  和  KEYGUARD_DISABLE_FINGERPRINT,它们影响配置文件上级用户的键盘锁设置。
KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS,它只影响应用在托管配置文件中生成的通知。
DevicePolicyManager.createAndInitializeUser()方法和DevicePoli  cyManager.createUser()方法已弃用。
当给定用户的应用在前台运行时,setScreenCaptureDisabled()  方法现在也会屏蔽辅助结构。
EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM  现在默认为 SHA-256。出于向后兼容性考虑,仍然支持 SHA-1,但未来将会取消该支持。EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM  现在只接受 SHA-256。
Android 6.0(API 级别 23)中曾经存在的 Device initializer API 现已删除
EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS  已删除,因此 NFC 占位配置无法通过编程解锁受恢复出厂设置保护的设备
您现在可以使用  EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE  extra 在对托管设备进行 NFC 配置期间向设备所有者应用传递数据。
Android for Work API 针对 M 运行时权限(包括 Work 配置文件、辅助层及其他内容)进行了优化。新增的  DevicePolicyManager  权限 API 不会影响 M 之前版本的应用。
当用户退出通过ACTION_PROVISION_MANAGED_PROFILE或ACTION_PROVISION_MANAGED_DEVICE  intent发起的设置流程的同步部分时,系统现在会返回  RESULT_CANCELED  结果代码。
6、对其他 API 的变更:
6.1、流量消耗:android.app.usage.NetworkUsageStats  类已重命名为  NetworkStats。
7、对全局设置的变更:
7.1、这些设置不再通过  setGlobalSettings()  进行设置:
BLUETOOTH_ON
DEVELOPMENT_SETTINGS_ENABLED
MODE_RINGER
NETWORK_PREFERENCE
WIFI_ON
7.2这些全局设置现在可通过  setGlobalSettings()  进行设置:
WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN









    推荐阅读