苹果手机shadowrocket在
Android 5.0 (LOLLIPOP) 为用户和应用开发者提供了新功能。本文旨在介绍其中最值得关注的新 API。
如果您有已发布的应用,请务必查看您应该在应用中考虑的Android 5.0 行为变更。这些行为变更可能会影响您的应用在 Android 5.0 设备上的应用,即使您没有使用新的 API 或未开发新功能也是如此。
如需针对搭载 Android 5.0 的设备进一步优化您的应用,请将targetSdkVersion设置为21,在 Android 5.0 系统映像上安装您的应用并进行测试,然后发布更新了此变更的应用。
您可以通过在代码中添加条件,在执行您的minSdkVersion不支持的 API 之前检查系统 API 级别,实现在使用 Android 5.0 API 的同时仍为旧版本提供支持。如需详细了解如何保持向后兼容性,请参阅支持不同平台版本。
如果您之前发布过 Android 应用,请注意您的应用可能受到 Android 5.0 变化的影响。
Android 5.0 添加了对 Android 的新Material Design样式的支持。您可以创建具有 Material Design 功能的应用,实现动态视觉效果,利用其中的界面元素转换赋予用户自然的感觉。此支持包括:
在之前的版本中,最近使用的应用屏幕只能为最近与用户交互过的每个应用显示一项任务。现在,您的应用可以根据需要为其他并发文档 activity 打开更多任务。此功能简化了多任务处理,通过在所有应用中提供一致的切换体验,让用户能够在最近使用的应用屏幕中的各个 activity 和文档之间快速切换。此类并发任务的示例可能包括网络浏览器应用中打开的标签页、效率应用中的文档、游戏中并发的比赛或即时通讯应用中的聊天。您的应用可以通过ActivityManager.AppTask类管理其任务。
为了避免“最近使用的应用”屏幕变得杂乱,您可以在应用中设置该屏幕中显示的任务数上限。为此,请设置application>
属性android:maxRecents。目前可指定的上限为每位用户 50 个任务(RAM 较低设备为 25 个)。
可以将“最近使用的应用”屏幕中的任务设置为在重新启动后保留。如需控制持久化行为,请使用android:persistableMode属性。您还可以通过调用setTaskDescription()方法,在“最近使用的应用”屏幕中更改 activity 的视觉属性,如 activity 的颜色、标签和图标。
此版本引入了PermissionRequest类,让您的应用可以通过getUserMedia()等 Web API 授予WebView访问相机和麦克风之类受保护资源的权限。您的应用必须对这些资源拥有相应的 Android 权限,才能向WebView授予权限。
借助新的onShowFileChooser()方法,您现在可以在WebView中使用输入表单字段,然后启动文件选择器从 Android 设备中选择图像和文件。
Android 5.0 引入了新的API,让您可以为应用添加屏幕截图和屏幕共享功能。例如,如果您想在视频会议应用中启用屏幕共享,便可使用此功能。
新的createVirtualDisplay()方法允许您的应用将主屏幕(默认屏幕)的内容捕获到Surface对象中,然后您的应用便可以将其发送到整个网络。该 API 仅允许捕获非安全屏幕内容,不允许捕获系统音频。如需开始截取屏幕,您的应用必须先使用通过createScreenCaptureIntent()方法获得的Intent启动屏幕截图对话框,请求用户授予权限。
Android 5.0 中的锁定屏幕可以显示通知。用户可以通过设置选择是否允许在安全的锁定屏幕上显示敏感的通知内容。
您的应用可以控制在安全锁定屏幕上显示的通知中可见信息的详细程度。如需控制可见性级别,请调用setVisibility()并指定以下值之一:
当可视性级别为VISIBILITY_PRIVATE时,您还可以提供隐藏个人详情的删减版通知内容。例如,短信应用可能会显示一条通知,指出“您有 3 条新短信”,但是隐藏了短信内容和发件人。如需提供此备用通知,请先使用Notification.Builder创建备用通知。创建专用通知对象时,请通过setPublicVersion()方法为其附加替换通知。
Android 5.0 使用与您的应用通知关联的元数据,以更智能的方式对通知排序。如需设置元数据,请在构建通知时调用Notification.Builder中的下列方法:
如需详细了解如何使用 OpenGL ES(包括如何在运行时检查设备支持的 OpenGL ES 版本),请参阅OpenGL ES API 指南。
除了 OpenGL ES 3.1 之外,此版本还提供了一个扩展包,其中包括 Java 接口和对高级图形功能的原生支持。Android 将这些扩展视作单个软件包。(如果存在ANDROID_extension_pack_es31a扩展,您的应用可以假设该软件包中的所有扩展都存在,并通过单个#extension语句启用着色语言功能。)
该扩展包的 Java 接口随GLES31Ext提供。在您的应用清单中,您可以将应用声明为必须安装在支持该扩展包的设备上。 例如:
使用新的通知和媒体 API 可确保系统界面了解媒体播放情况,并可以提取并显示专辑封面。现在,可以利用新增的MediaSession和MediaController类更轻松地在整个界面和服务范围内控制媒体回放。
新的MediaSession类取代了已废弃的RemoteControlClient类,提供了一组用于处理传输控件和媒体按钮的回调方法。如果您的应用提供媒体播放,并运行在 AndroidTVWear平台上,请使用MediaSession类,通过同样的回调方法来处理您的传输控制。
现在,您可以使用新增的MediaController类开发自己的媒体控制器应用。该类可通过您的应用的界面进程,以线程安全方式监控和控制媒体回放。创建控制器时,请指定一个MediaSession.Token对象,以便您的应用可与给定MediaSession交互。通过使用MediaController.TransportControls方法,您可以发送play()、stop()、skipToNext()和setRating()等命令来控制该会话上的媒体播放。对于控制器,您还可以注册一个MediaController.Callback对象来监听会话中的元数据和状态变化。
此外,您还可以利用新增的Notification.MediaStyle类创建允许将回放控制与媒体会话绑定的丰富通知。
如需与媒体浏览器服务交互,请使用MediaBrowser类。创建MediaBrowser实例时,为MediaSession指定组件名称。然后,您的应用就可以通过使用该浏览器实例连接到关联的服务并获取MediaSession.Token对象,以播放通过该服务公开的内容。
Android 5.0 扩展了存储访问框架,允许用户选择整个目录子树,从而授予应用对所含全部文档的读写权限,而无需用户确认每项内容。
借助新增的createDocument()方法,您可以在该子树下的任何位置新建文档或目录。如需管理现有文档,请使用renameDocument()和deleteDocument()。在发出调用之前,请检查COLUMN_FLAGS以验证提供程序是否支持这些调用。
Android 5.0 还在共享存储空间上引入了新的软件包专属目录,您的应用可在其中放置供加入到MediaStore中的媒体文件。新的getExternalMediaDirs()会返回所有共享存储设备上这些目录的路径。与getExternalFilesDir()类似,您的应用无需额外权限便可访问返回的路径。平台会定期扫描这些目录中的新媒体,但您也可以使用MediaScannerConnection明确扫描是否有新内容。
Android 5.0 提供了新的多网络 API,允许您的应用动态扫描具有特定能力的可用网络,并与它们建立连接。当您的应用需要 SUPL、彩信或运营商计费网络等专业化网络时,或者您想使用特定类型的传输协议发送数据时,就可以使用此功能。
当系统检测到合适的网络时,它会连接到该网络并调用onAvailable()回调。您可以使用回调中的Network对象来获取有关该网络的更多信息,或者引导流量使用所选网络。
Android 4.3 为发挥核心作用的蓝牙低功耗(Bluetooth LE) 引入了平台支持。在 Android 5.0 中,Android 设备现在可以充当蓝牙 LE外围设备。应用可以利用此功能让附近设备发现它。例如,您可以开发这样的应用:让设备发挥计步器或健康监测仪的作用,并与其他蓝牙 LE 设备进行数据通信。
借助新的android.bluetooth.leAPI,您的应用可以广播通告、扫描响应以及与附近的蓝牙 LE 设备建立连接。如需使用新的广告和扫描功能,请在清单中添加BLUETOOTH_ADMIN权限。当用户更新您的应用或从 Play 商店下载您的应用时,系统会请求他们向您的应用授予以下权限:“蓝牙连接信息:允许该应用控制蓝牙,包括向附近的蓝牙设备广播或获取其相关信息。”
如需启动蓝牙 LE 广播,以便其他设备能够发现您的应用,请调用startAdvertising()并传入AdvertiseCallback类的实现。回调对象会收到广播操作成功或失败的报告。
Android 5.0 引入了ScanFilter类,让您的应用可以只扫描其感兴趣的特定类型设备。如需开始扫描蓝牙 LE 设备,请调用startScan()并传入过滤条件列表。在方法调用中,您还必须提供ScanCallback的实现,以便在发现蓝牙 LE 通告时进行报告。
除了提供新功能外,Android 5.0 还重视电池续航时间的改善。您可以使用新的 API 和工具来了解和优化应用的功耗。
Android 5.0 新增了一个JobSchedulerAPI,允许您定义一些系统在稍后或指定条件下(如设备充电时)以异步方式运行的作业,从而优化电池续航时间。下列情形下,作业计划排定功能很有用:
使用JobInfo.Builder类可配置应如何运行已排计划的任务。您可以安排任务在特定条件下运行,例如:
如果设备有稳定的电源(即设备已接通电源超过 2 分钟,且电池处于健康水平),系统将运行任何已准备好运行的已安排作业,即使作业的截止时间尚未过。
新的dumpsys batterystats命令会生成关于设备电池用量的有趣统计数据,这些数据按唯一用户 ID (UID) 进行整理。统计数据包括:
您可以使用Battery Historian工具对dumpsys命令的输出进行检查,以根据日志生成 HTML 格式的用电相关事件。这些信息可让您更轻松地了解和诊断任何电池相关问题。
Android 5.0 提供了用于在企业环境内运行应用的新功能。如果用户已有个人账号,则设备管理员可以启动受管配置过程,以向设备添加共存但独立的受管理资料。与受管理个人资料关联的应用与非受管理应用一并出现在用户的启动器、最近使用的应用屏幕和通知中。
默认情况下,受管理个人资料中只有一小部分应用处于启用状态。您可以通过调用enableSystemApp()在受管理个人资料中安装其他应用。
如果您要开发启动器应用,可以使用新增的LauncherApps类获取可为当前用户启动的 activity 以及任何关联的受管配置文件的列表。您的启动器可以通过向可绘制图标附加工作标记,在视觉上突出显示受管理的应用。如需检索带徽章的图标,请调用getUserBadgedIcon()。
Android 5.0 引入了部署设备所有者应用的功能。设备所有者是一种专业的设备管理员,具有在设备上创建和移除次要用户以及配置全局设置的额外功能。您的设备所有者应用可以使用DevicePolicyManager类中的方法对受管设备上的配置、安全性和应用进行精细控制。一台设备在同一时间只能有一名活动的设备所有者。
如需部署和激活设备所有者,您必须在设备处于未配置状态时执行从编程应用到设备的 NFC 数据传输。此数据传输发送的信息与托管配置中描述的配置 intent 中发送的信息相同。
Android 5.0 引入了一个新的固定屏幕 API苹果手机shadowrocket在,可让您暂时限制用户离开您的任务或被通知打断。举例来说,如果您要开发一款教育应用来支持 Android 上的高风险评估要求,或者您要开发单一用途或信息亭应用,便可使用此 API。您的应用激活固定屏幕后,在其退出该模式之前,用户将无法查看通知、访问其他应用或返回主屏幕。
您现在可以利用新增的PdfRenderer类,将 PDF 文档页面渲染成位图图像后进行打印。您必须指定一个可查找(即内容可随机访问的)ParcelFileDescriptor,系统会在其上写入可打印内容。您的应用可以使用openPage()获取要渲染的页面,然后调用render()将打开的PdfRenderer.Page转换为位图。如果您只想将文档的一部分转换为位图图像(例如,为了实现平铺渲染以放大文档),还可以设置其他参数。
从 Android 5.0 开始,用户可以更轻松地在平台支持的所有输入法 (IME)之间切换。执行指定的切换操作(通常是触摸软键盘上的地球图标)可在所有此类 IME 中循环切换。这种行为变更是通过shouldOfferSwitchingToNextInputMethod()方法实现的。
此外,框架现在会检查下一个 IME 是否具有切换机制(并进而检查该 IME 是否支持切换到其后的 IME)。具有切换机制的 IME 将不会循环切换到不具有该机制的 IME。此行为变更是由switchToNextInputMethod()方法实现的。
如需查看如何使用更新后的 IME 切换 API 的示例,请参阅此版本中更新后的软键盘实现示例。如需详细了解如何实现 IME 之间的切换,请参阅创建输入法。
现在支持在uses-feature元素中使用以下值,以便您确保只在提供应用所需功能的设备上安装您的应用。
本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。