Android4.4新特性

API Level :19

1,如果您的应用从外部存储空间读取...

        您的应用在 Android 4.4 上运行时无法读取外部存储空间上的共享文件,除非您的应用具有 READ_EXTERNAL_STORAGE 权限。也就是说,没有此权限,您无法再访问 getExternalStoragePublicDirectory() 返回的目录中的文件。但是,如果您仅需要访问 getExternalFilesDir() 提供的您的应用特有目录,那么,您不需要 READ_EXTERNAL_STORAGE 权限。

2,如果您的应用使用 WebView...

        在 Android 4.4 上运行时,您的应用的行为会有所不同,将应用的 targetSdkVersion 更新为“19”或更高版本时尤其如此。

WebView 类的底层代码和相关 API 已升级为基于现代的 Chromium 源代码快照这会带来各种性能提升,同时为新的 HTML5 功能和远程调试 WebView 内容提供支持。此次升级的范围意味着如果您的应用使用 WebView,则在某些情况下其行为可能会受影响。

3,如果您的应用使用 AlarmManager...

        将您的应用的 targetSdkVersion 设置为“19”或更高版本时,您使用 set() 或 setRepeating() 创建的闹铃将变得不准确。
提高电源效率,Android 现在批处理在合理的相似时间发生的所有应用的闹铃,以便系统仅唤醒设备一次,而不是多次唤醒设备来处理每个闹铃。

4,如果您的应用使用 ContentResolver 同步数据...

        将应用的 targetSdkVersion 设置为“19”或更高版本时,使用 addPeriodicSync() 创建同步将在默认的 Flex 间隔内(在您指定期间的 4% 左右)执行您的同步操作。例如,如果您的轮询频率是 24 小时,则您的同步操作每天可能会在大约一小时的时间窗口内发生,而不是在确切地同一时间发生。
        要指定您自己的 Flex 间隔进行同步操作,您应开始使用新的 requestSync() 方法。

5,主机卡模拟

        Android 应用现在可以模拟使用 APDU 进行数据交换的 ISO14443-4 (ISO-DEP) NFC 卡(根据在 ISO7816-4 中进行的指定)。这让运行 Android 4.4 并启用 NFC 的设备可以同时模拟多个 NFC 卡,并允许 NFC 支付终端或其他 NFC 读取器基于应用标识符 (AID) 通过适当的 NFC 卡发起交易。

6,NFC 读取器模式

        新的 NFC 读取器模式允许 Activity 将所有 NFC Activity 限制为在前台时仅读取 Activity 感兴趣的标记类型。您可以使用 enableReaderMode() 为您的 Activity 启用读取器模式,提供一个 NfcAdapter.ReaderCallback 的实现,用于在检测到新的标记时接收回调。

7,红外线发射器

        现在,在附带红外线 (IR) 发射器的设备上运行时,您可以使用 ConsumerIrManager API 发射红外线信号。要获取 ConsumerIrManager 的实例,请使用 CONSUMER_IR_SERVICE 调用 getSystemService() 作为参数。然后,您可以使用 getCarrierFrequencies() 查询设备支持的红外线频率,并通过使用 transmit() 传递所需的频率和信号模式来发射信号。

8,自适应播放

        现在,可通过 MediaCodec API 支持自适应视频播放,从而实现在 Surface 上播放时分辨率可无缝变更 - 您可以馈送新分辨率的解码器输入帧,输出缓冲区的分辨率将发生变化,但不会出现大间隙。
        您可以通过向 MediaFormat 添加两个密钥用于从编解码器指定您的应用所需的最大分辨率(KEY_MAX_WIDTH 和 KEY_MAX_HEIGHT),来启用自适应播放。将上述密钥添加到您的 MediaFormat 后,使用 configure() 将 MediaFormat 传递到您的 MediaCodec 实例。

9,Surface 图像读取器

        新的 ImageReader API 让您可以直接访问图像缓冲区,因为它们渲染为 Surface。您可以通过静态方法 newInstance() 获取 ImageReader。然后,调用 getSurface() 新建一个 Surface,并使用 MediaPlayer 或 MediaCodec 等制作器传输您的图像数据。要在可通过 Surface 获取新图像时收到通知,请实现 ImageReader.OnImageAvailableListener 接口,并使用 setOnImageAvailableListener() 注册它。

10,隐藏式字幕

        现在,播放 HTTP Live Stream (HLS) 视频时,VideoView 支持 WebVTT 字幕跟踪,根据用户在系统设置中定义的隐藏式字幕首选项显示字幕跟踪。
        您也可以使用 addSubtitleSource() 方法为 VideoView 提供 WebVTT 字幕跟踪。此方法接受一个 InputStream,其携带字幕数据和指定该字幕数据格式的 MediaFormat 对象,您可以使用 createSubtitleFormat() 指定该对象。这些字幕也会按照用户的首选项显示在视频上。

11,动画暂停

        Animator API 现在允许您使用方法 pause() 和 resume() 暂停和继续进行中的动画。

要跟踪动画的状态,您可以实现 Animator.AnimatorPauseListener 接口,其在暂停和继续动画时提供回调:pause() 和 resume()。然后使用 addPauseListener() 向 Animator 对象添加侦听器。

12,批处理传感器事件

        为更好地管理设备电源,SensorManager API 现在允许您指定您想要系统向应用传输批量传感器事件的频率。这不会减少给定时间段内您的应用可用的实际传感器事件数量,但是会降低系统使用传感器更新调用 SensorEventListener 的频率。也就是说,系统会将一段时间内发生的所有事件保存起来,然后一次性将它们传输到您的应用,而不是在每个事件发生时将其传输到您的应用。

13,沉浸式全屏模式

        要为您的应用提供填充整个屏幕的布局,适用于 setSystemUiVisibility() 的新标记 SYSTEM_UI_FLAG_IMMERSIVE(与 SYSTEM_UI_FLAG_HIDE_NAVIGATION 结合使用时)将启用新的沉浸式全屏模式。在启用沉浸式全屏模式后,您的 Activity 将继续接收所有触摸事件。用户可以沿着系统状态栏正常出现的区域向内滑动来显示系统状态栏。这将清除 SYSTEM_UI_FLAG_HIDE_NAVIGATION 标记(如果应用了 SYSTEM_UI_FLAG_FULLSCREEN 标记,也会清除该标记),因此系统状态栏保持可见状态。但是,如果您想要系统状态栏在片刻后再次隐藏,可以改用 SYSTEM_UI_FLAG_IMMERSIVE_STICKY 标记。

14,透明系统状态栏

        现在,您可以使用新主题背景 Theme.Holo.NoActionBar.TranslucentDecor 和 Theme.Holo.Light.NoActionBar.TranslucentDecor 将系统状态栏设置为部分透明。通过启用透明系统状态栏,您的布局将填充系统状态栏后面的区域,因此,您也必须为不应被系统状态栏覆盖的布局部分启用 fitsSystemWindows

如果您要创建自定义主题背景,则将其中某个主题背景设置为父主题背景,或在您的主题背景中添加 windowTranslucentNavigation 和 windowTranslucentStatus 样式属性。



发布了155 篇原创文章 · 获赞 125 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/u011216417/article/details/75208143