Android 4.4可能影响开发者的特性简介
此文内容整理自Android官网。做个人笔记用。
一.短信提供程序
从4.4开始,只有默认短信应用可以接收SMS_DELIVER_ACTION广播或WAP_PUSH_DELIVER_ACTION广播。但其他应用可以通过侦听SMS_DELIVER_ACTION广播,这些应用也许会在设备接收短信时收到通知。
SMS_DELIVER_ACTION广播主要用于那些没有被选为默认短信应用、但需要读取特殊传入信息(号码验证)的应用
二.NFC读取器模式
新的NFC读取器模式允许Activity将所有NFC Activity限制为在前台时仅读取Activity感兴趣的标记类型。
您可以使用enableReaderMode()为您的Activity启用读取器模式,提供一个NfcAdapter.ReaderCallback的实现,用于检测到新的标记时接收回调。这个新功能与主机卡模拟结合使用,将允许Android同时在移动支付接口的两端运行:一个为终端,一个为客户端
三.红外线发射器
现在,在附带红外线(IR)发射器的设备上运行时,您可以使用ConsumerIrManager API发射红外线信号。要获取ConsumerIrManager的实例,请使用CONSUMER_IR_SERVICE调用getSystemService()作为参数。
getCarrierFrequencies()查询设备支持的红外线频率,并通过使用transmit()传递所需的频率和信号模式来发射信号。
hasIrEmitter()检查设备是否附带红外线发射器,但是,如果应用仅与附带红外线发射器的设备兼容,则应在应用的
"android.hardware.consumerir"(FEATURE_CONSUMER_IR)的清单中包含一个<user-feature>元素。
四.遥控器
Android 4.0(API 级别 14)引入了 RemoteControlClient API,其允许媒体应用从远程客户端使用媒体控制器事件,例如锁定屏幕上的媒体控件。现在,新的 RemoteController API 允许您构建自己的遥控器,使您能够开发创新的应用和外围设备来控制与 RemoteControlClient 集成的任何媒体应用的播放。
要生成遥控器,您可随意实现您的用户界面,但要向用户的媒体应用传输媒体按钮事件,就必须创建一个服务来扩展 NotificationListenerService 类和实现 RemoteController.OnClientUpdateListener 接口。
将 NotificationListenerService 作为基础非常重要,因为它可提供适当的隐私限制,其要求用户在系统安全性设置中启用您的应用作为通知侦听器。
NotificationListenerService 类包含一对您必须实现的抽象方法,但如果您仅关心用于处理媒体播放的媒体控制器事件。那么您可以为其设置空实现,并将重点转向 RemoteController.OnClientUpdateListener 方法。
五.场景和转场
新的 android.transition 框架提供有诸多 API,可为在不同用户界面状态之间创建动画提供便利。一个关键的功能是让您能够通过为每个状态创建单独的布局,定义不同的 UI 状态,称为“场景”。当您需要制作从一个场景到另一个场景的动画时可执行“转场”,其计算更改从当前场景到下一场景的布局所需的动画。要在两个场景间进行转场,您通常需要执行以下操作:
1.指定包含您要更改的 UI 组件的 ViewGroup。
2.指定表示变更的最终结果的布局(下一个场景)。
3.指定应添加布局变更动画的转场类型。
4.执行转场。
您可以使用 Scene 对象完成第 1 步和第 2 步。Scene 包含描述执行转场所必需的布局属性的元数据,其中包括场景的父视图和
场景布局。您可以使用类构造函数或静态方法 getSceneForLayout() 创建 Scene。
然后,您必须使用 TransitionManager 完成第 3 步和第 4 步。其中一个方法是将您的 Scene 传递到静态方法 go()。这样可在
当前布局中找到场景的父视图,并在子视图上执行转场,以实现 Scene 定义的布局。
或者,您根本不需要创建 Scene 对象,而是改为调用 beginDelayedTransition(),指定一个包含您要更改的视图的 ViewGroup。
然后,添加、移除或重新配置目标视图。在系统根据需要进行更改后,转场开始以动画方式呈现所有受影响的视图。
要进行其他控制,您可以使用项目 res/transition/ 目录中的 XML 文件定义应在预定义的场景间发生的转场集。
在 <transitionManager> 元素内部,指定一个或多个 <transition> 标记,每个标记均指定一个场景(引用布局文件)以及进入和/或退出该场景时将应用的转场。然后,使用 inflateTransitionManager() 扩展此转场集。使用返回的 TransitionManager通过 transitionTo() 执行每个转场,传递一个由 <transition> 标记表示的 Scene。您还可以使用 TransitionManager API 以编程方式定义转场集。
指定转场时,您可以使用 Transition 的子类(如 Fade 和 ChangeBounds)定义的多个预定义类型。如果您不指定转场类型系统会默认使用 AutoTransition,其根据需要自动消失、移动和重新调整视图。此外,您也可以通过扩展其中的任何一个类来创建自定义转场,以执行您需要的动画。自定义转场可以跟踪您想要跟踪的任何属性变更,并基于这些变更创建您需要的任何动画
例如,您可以提供 Transition 的子类,用于侦听对视图的“旋转”属性进行的变更,然后以动画方式呈现所有变更。
如需了解详细信息,请参阅 TransitionManager 文档。
六.外部存储空间访问
在辅助外部存储介质上读取和写入应用特定文件,如在设备提供模拟的存储空间和 SD 卡时。新增的方法 getExternalFilesDirs()
与现有的 getExternalFilesDir() 方法作用相同,不过它会返回一个 File 对象数组。在读取或写入此方法返回的任意路径之前将 File 对象传递到新的 getStorageState() 方法以验证存储空间当前是否可用。
现在,用于访问应用专有缓存目录和 OBB 目录的其他方法也具有对应的版本,这些版本可提供辅助存储设备的访问权限:
分别为 getExternalCacheDirs() 和 getObbDirs()。
将返回的 File 数组中的第一个条目视为设备的主要外部存储空间,其与 getExternalFilesDir() 等现有方法返回的 File 相同。
注:从 Android 4.4 开始,当您需要使用上述方法仅访问您的应用特定外部存储区域时,此平台不再要求您的应用获取
WRITE_EXTERNAL_STORAGE 或 READ_EXTERNAL_STORAGE。不过,如果您要访问 getExternalStoragePublicDirectory()
提供的外部存储空间的可共享区域,则需要这些权限。
七.新传感器
新的TYPE_GEOMAGNETIC_ROTATION_VECTOR传感器基于磁力计提供旋转矢量数据,当陀螺仪不可用或与批处理传感器事件结合用于在手机处于休眠状态下记录设备的屏幕方向时,它可以很好地代替TYPE_ROTATION_VECTOR传感器。此传感器耗电比TYPE_ROTATION_VECTOR更低,但可能容易出现噪音事件数据,因此户外使用最佳。
Android硬件中支持内置计步传感器:
TYPE_STEP_DETECTOR:
用户每迈出一步,此传感器就会触发一个事件。对于每个用户步伐,此传感器提供一个值为1.0的事件和一个指示此
步伐发生时间的时间戳。
TYPE_STEP_COUNTER:
此传感器也会针对检测到的每个步伐触发一个事件,但提供是自应用首次注册该传感器以来累计的总步数。
注意:两个计步传感器提供的结果并非总是相同。与来自TYPE_STEP_DETECTOR的事件相比,TYPE_STEP_COUNTER事件的发生延迟
时间更长,但TYPE_STEP_COUNTER算法会进行较多的处理以消除误报。因此,TYPE_STEP_COUNTER在传输事件时可能更为缓慢,但
结果应更为准确。在使用这两个传感器之前,应使用FEATURE_SENSOR_SETP_DETECTOR和FEATUR_SENSOR_STEP_COUNTER常量检查
hasSystemFeature()的可用性。
八.界面
1.沉浸式全屏模式
要为您的应用提供填充整个屏幕的布局,适用于setSystemUiVisibility()的新标记SYSTEM_UI_FLAG_IMMERSIVE
(与SYSTEM_UI_FLAG_HIDE_NAVIGATION结合使用时)将启用新的沉浸式全屏模式。在启用沉浸式全屏模式后,您的Acitivity将继续接收所有触摸事件。用户可以沿着系统状态正常出现的区域向内滑动来显示系统状态栏。这将清除SYSTEM_UI_FLAY_HIDE_NAVIGATION标记(如果应用了SYSTEM_UI_FLAG_FULLSCREEN标记,也会清除该标记),因此系统状态栏保持可见状态。但是,如果您想要系统状态栏在片刻之后再次隐藏,可以改用SYSTEM_UI_FLAG_IMMERSIVE_STICKY标记。
2.透明状态栏
现在,您可以使用新主题背景Theme.Holo.NoActionBar.TranslucentDecor和Theme.Holo.Light.NoActionBar.TranslucentDecor将系统状态栏设置部分透明。通过启用透明系统状态栏,您的布局将填充系统状态栏后面的区域,因此,您也必须为不应被系统状态栏覆盖的布局部分启用fitsSystemWindows。如果您要创建自定义主题背景,则将其中某个主题背景设置为你主题背景,或在您的主题背景中添加windowTranslucentNavigation和windowTranslucentStatus样式属性。
九.设备功能
使用<uses-feature>标记声明的新设备功能,以声明您的应用要求。
注:<uses-feature>用来声明应用中需要用的硬件和软件的功能
FEATURE_DEVICE_ADMIN:此设备通过设备管理员支持设备规范执行
FEATURE_NFC_HOST_CARD_EMULATION:此设备支持基于主机的NFC卡模拟
FEATURE_SENSOR_STEP_COUNTER:此设备附带硬件计步器
FEATURE_SENSOR_STEP_DETECTOR:此设备附带硬件步测器