安卓可穿戴设备高级教程-一-

168 阅读1小时+

安卓可穿戴设备高级教程(一)

原文:Pro Android Wearables

协议:CC BY-NC-SA 4.0

零、简介

欢迎阅读 Pro Android 可穿戴设备这本书,在这里你将学习如何为智能手表设备开发应用。将有一本名为 Pro Android IoT (物联网)的后续书籍,将涵盖其他 Android APIs,如 Android TV、Android Auto 和 Android Glass,因此在这本书中,我只能专注于探索智能手表设备市场。

智能手表和独立电视电视机持续爆炸的原因是一个基本的经济学问题。现在有数十家制造商生产智能手表,包括传统手表品牌,如西铁城、劳力士、卡西欧、豪雅、天美时和 Fossil,以及所有主要的消费电子巨头,包括索尼、三星、LGE、华硕、华为和摩托罗拉,它们现在有多种智能手表型号。这产生了难以置信的大规模竞争,从而压低了价格,使这一价值主张难以辩驳。我今天在谷歌上搜索了 Android Wear 手表,发现了两款最令人印象深刻的智能手表,摩托罗拉 MOTO 360 和华硕 ZenWatch,售价不到 200 美元。对于你手腕上用玫瑰金和小牛皮制成的电脑(ZenWatch)或漂亮的碳黑钢手镯(MOTO),这是一个非常合理的价位。我预计智能手表的价格将在 150 美元至 450 美元之间,并在未来继续增加销量,同时增加屏幕分辨率(480 至 640 像素)、处理器内核(2 至 4 个)和系统内存(1 至 2 GB)。

这本书将涵盖如何为爆炸式增长的智能手表市场开发应用,它包括谷歌发布的新的 Watch Faces API ,允许开发人员将他们的应用创建为手表表面设计本身!既然这就是手表的用途,我将详细讨论 Watch Faces API,以便您的智能手表应用可以向用户提供它们的功能,同时告诉他们时间、日期、天气、活动、通知等等。你将学习如何使用 Google Play 服务,并制作 Android Wear 应用,这些应用包含在你的智能手表以及智能手机或平板电脑上运行的组件,称为配套活动应用

第一章在您设置 Wear 生产工作站之前,查看 Android Wear 和可穿戴概念和设计考虑事项,包括您的 IDE、SDK 和新媒体内容开发应用第二章。我将在第三章中讨论 Android Wear 的新功能,在你了解 IntelliJ 想法之前,在第四章中为你的 Wear 项目创建一个基础。在第五章中,您将设置 IntelliJ IDEA,也称为 Android Studio,用于生产准备,确保所有 SDK 和仿真器都是最新的,并创建用于圆形或方形表盘测试的 avd。

在第六章中,你将通过查看 Android Watch Faces API 及其所有功能和 UI 设计考虑事项,为开始编码做好准备。在第七章中,你将实际编写你的手表脸服务和手表脸引擎类。这些驱动了你将在后续章节中实现的表盘基础设施。

在第八章中,您将把您的表盘计时引擎放在适当的位置,学习时间和时区类,以及实现 BroadcastReceiver 对象来管理这些类(对象)的实现。在第九章中,你将实现核心的手表界面 API 方法,控制不同的手表界面渲染风格和事件处理。

在第十章中,您将了解矢量图形以及如何使用 onDraw()方法在智能手表表面“渲染”设计,在第十一章中,您将了解光栅图形以及如何使用 BitmapDrawable 对象和 PNG32 位图素材将数字图像添加到您的智能手表设计中。在第十二章中,您将学习数字图像技术,该技术将允许您优化用于适应不同智能手表显示屏颜色限制的颜色数量,从而为您的智能手表应用设计获得最逼真的效果。

在第十三章中,您将了解谷歌移动服务(GMS)API 以及如何访问 Google Play 服务,以便您的 Wear 应用能够比使用原生 Android 和 Android Wear APIs 做更多的事情。在第十四章中,你将在你的代码中实现 Android Wear 数据 API,创建一个 Watch Face 工具类来管理你的用户设置。

在第十五章中,您将学习如何为真实世界的硬件设备建立测试环境,了解 Android 调试桥(ADB ),以及如何为您的硬件设备实现 USB 设备驱动程序。

在第十六章中,您将学习如何处理 API 弃用以及类和方法调用代码更新,因为您删除了弃用的 Time 类,并将其替换为 Calendar 和 GregorianCalendar 类代码,从而使您的应用更加高效。

最后,第十七章介绍了 Android 物联网 API 和其他 Wear API 特性,供您的智能手表应用考虑,例如分别使用语音和 GPS APIs 的语音识别和位置跟踪。借助本书中的信息,您将可以使用 Android Wear 和 Android Watch Faces APIs 开发智能手表应用!

一、Android 可穿戴设备简介:概念、类型和材质设计

欢迎阅读 Pro Android 可穿戴设备书籍!这本书将向你展示如何为那些在你普通的智能手机和平板电脑之外的 Android 设备开发 Android Studio 应用。这本书还包括可以戴在你身上的设备的 Android 开发,这就是为什么这些 Android 设备通常被称为“可穿戴设备”。

如果你正在寻找为 Android 设备开发,如 iTV 集、4K iTV、游戏机、机器人或其他设备,那么你想要的书是 Pro Android IoT (Apress,2016)书。该标题涵盖了被称为“物联网”的 Android 设备的开发,包括不戴在身上的设备,以及更普通的平板电脑和手机之外的设备。

本章将介绍不同类型的可穿戴设备,以及它们的功能和流行用法,您将了解可穿戴设备的术语、概念、差异化因素和重要技术,并仔细了解您可以为可穿戴设备开发哪些类型的 Android 应用。我将在这里介绍所有与可穿戴设备相关的知识,以便您可以在第二章中专注于设置您的工作站,然后在第三章的中了解 Android 可穿戴设备的功能。我还会解释一下可穿戴设备和 Android 可穿戴外设的区别。

我还将讨论 Android 5 中添加的新材质设计功能,因为这些功能可用于可穿戴设备的应用开发,你将看到你可以用这些功能做的所有很酷的事情!

可穿戴技术定义:什么是可穿戴?

术语可穿戴设备,以及术语可穿戴技术可穿戴设备,表示基于嵌入式计算机硬件的消费电子技术,该硬件内置于穿戴在人体外部的产品中。这包括衣物和配饰,包括珠宝(如手表)和防护服(如眼镜),以及袜子、鞋子、帽子和手套等衣物,以及可以舒适佩戴在身体某处的运动、健康和健身产品。

可穿戴设备通常具有少量的通信能力,这将允许设备穿戴者实时访问信息。数据输入功能是可穿戴设备的必要功能,因为它允许用户访问可穿戴设备的功能,并使用它来运行您将在本书的过程中学习开发的应用。数据输入通常采用触摸屏界面、语音识别(也称为语音输入)的形式,或者有时通过使用可穿戴设备本身内置的硬件按钮。

由于有了云,本地存储对于可穿戴设备来说是不必要的,尽管一些设备具有 micro SD(安全数字)卡或在链接的配套设备上存储数据。可穿戴设备能够执行许多与手机和平板电脑相同的应用任务;事实上,许多可穿戴设备要求可穿戴设备在蓝牙 4.x 技术的操作范围内与另一个 Android 设备“结合”(本章稍后将对此进行详细介绍)。

与当今市场上的手持技术相比,Android 可穿戴设备在“传感器输入”方面往往更加复杂。这是因为可穿戴设备将提供智能手机或平板设备通常没有的传感和扫描功能。这方面的例子包括生物反馈和生理功能跟踪等功能,如脉搏、心率、锻炼强度、睡眠监测等。

可穿戴硬件设备的示例包括智能手表、智能眼镜、纺织品(也称为智能织物)、帽子、便帽、鞋子、袜子、隐形眼镜、耳环、头带、助听器和珠宝,例如戒指、手镯和项链。可穿戴技术往往指的是可以毫不费力地穿上和脱下的东西。值得注意的是,可穿戴设备概念的版本在本质上更加激进,例如植入设备,如微芯片甚至智能纹身。在本书中,我不会讨论这些非主流设备类型的应用开发。因为普通大众将主要使用智能手表,所以我将把重点放在这类可穿戴设备上。最终,无论设备是佩戴在身体上还是整合到身体中,这些 Android 可穿戴设备的目的都是提供对消费电子产品的持续、方便、便携、无缝和免提访问。

可穿戴应用开发:什么类型的应用?

可穿戴技术的用途仅限于你的想象力,这些应用的影响将是深远的,这就是为什么你首先购买了这本 Pro Android 可穿戴设备的原因!

可穿戴应用将在许多方面影响广泛的行业垂直领域。许多行业都在采用 Android 可穿戴设备,其中包括医疗保健、制药、教育、健身、娱乐、音乐、老龄化、残疾、交通、金融、企业、保险、汽车和游戏行业,并且该列表每天都在增长。

这些行业中的可穿戴应用的目标应该是将功能强大的便携式电子设备和计算机无缝融入个人的日常生活。在出现在消费市场之前,可穿戴设备主要用于军事行动以及制药、医疗保健、体育和医药行业。

十多年前,医学工程师们开始讨论一种可穿戴设备,这种设备可以以智能衬衫或智能腕带的形式监控患者的健康。其中至少有一项是当今的主流技术,其目的是监测生命体征,并将生物反馈信息发送到应用或网站进行数据跟踪和分析。

你可以在可穿戴设备上创建的 Android 应用的类型仅限于你的想象。这是因为可穿戴设备与更先进的硬件“配对”,因此具有智能手机或平板电脑所具有的相同硬件功能,以及智能手机和平板电脑所不具备的一些传感器!

一个合乎逻辑的应用垂直领域是健康和福利监控;由于这些心率传感器,可以创建 Android 可穿戴设备应用来帮助用户生活中与健康相关的领域,例如他们在健身房的锻炼,在工作或旅行时跟踪他们的饮食,获得足够的睡眠,每天步行或跑步足够的英里数,以及帮助用户改善健康或至少保持健康的类似应用。

另一个合乎逻辑的垂直应用是社交媒体,因为目前的趋势是在一天的任何时候都与每个人保持联系,同时也结交新朋友或商业伙伴。机器人通过 Wi-Fi 或 4G 随时连接到互联网,因此这些类型的穿戴应用在可穿戴设备上也会非常受欢迎。

当然,游戏、手表人脸或皮肤、娱乐消费也将是可穿戴设备的海量应用垂直领域。让我们来看看这方面,这样你就可以知道如何应用你将学到的东西了!

Android 可穿戴乐趣:增强现实、教育娱乐和游戏化

虽然可穿戴技术可能会对社交媒体连接、健康、节食或健身领域产生重大影响,但可穿戴技术领域也有望对休闲游戏、音频视频(AV)娱乐、教育娱乐和增强现实(AR) 市场产生重大影响。将日常任务变成游戏乐趣的可穿戴应用,通常被称为游戏化 ,也是一个重大的市场机会。

AR 最初被称为混合现实,可以利用可穿戴技术。AR 使用 Android 平台中的 i3D OpenGL 功能,创建一个逼真的沉浸式 3D 环境,与你周围的现实世界实时同步,这要归功于你的 Android 5 应用中的 Java 7 代码。Android 4.4 和更早的版本使用 Java 6,而 Android 5 使用 Java 7。使用数字视频、数字图像或基于全球定位卫星(GPS)定位的技术,将虚拟现实或交互式 3D (i3D)与实际现实相结合,无论如何都不是什么新鲜事。AR 应用是可穿戴应用的最高级类型。

在世纪之交之前,人们就已经开始考虑通过使用可穿戴设备来交付 AR。重要的是,AR 硬件原型正在从笨重的技术(如 Oculus Rift 使用的巨大护目镜)转变为小巧、轻便、舒适、高度移动的 3D 虚拟现实系统。

下一个即将出现在可穿戴设备上的最复杂的应用将是可穿戴游戏。你可以期待很快在市场上看到为智能手表和智能眼镜开发的休闲游戏。仔细的优化是创建一个在可穿戴设备上运行良好的游戏应用的关键,我将在本书中讨论这个主题。

可穿戴设备的另一种复杂类型的娱乐应用是 AV 应用。在可穿戴设备上播放数字音频或数字视频也需要仔细的优化,以及拥有一副好的蓝牙高保真耳机的用户,幸运的是,这些耳机目前由十几家主要的电子产品制造商制造。

最后,更复杂的可穿戴应用之一是定制智能手表的面部或皮肤。这些可以把用户整天看着的表盘变成他们想要的样子。当然,你也可以创建大量基于文本的应用,比如办公工具或方便的秘籍管理器;这些在可穿戴设备上会很好用!

Android 可穿戴应用的未来需要反映时尚、功能、实用性、视觉和用户界面(UI)设计的无缝集成。我将在整本书中讨论如何做到这一点,在你把第二章第 ?? 节的开发工作站放在一起,并在第五章第 ?? 节的 ?? 中创建了模拟器之后,这样你就有了可穿戴开发的基础。

主流可穿戴设备:智能手表和智能眼镜

流行的消费电子产品制造商争相生产两种主要(即主流)类型的可穿戴设备。

智能手表是目前最受欢迎的可穿戴设备,市场上已经有数百种价格适中的型号。几个世纪过去了,手表已经成为国际时尚宣言。因此,这是最受欢迎和最有用的 Android 可穿戴设备也就不足为奇了。

另一种流行的可穿戴类型是智能眼镜,谷歌(Google)和 Vuzix (M100)等公司已经发布了数十种产品。让我们更仔细地看看这两种类型的可穿戴设备硬件,因为它们将成为运行您将在本书过程中创建的 pro Android 可穿戴设备应用的大多数设备类型。

智能手表:圆形表盘与方形有机发光二极管

消费电子产品中的智能手表可穿戴类型拥有最多的产品,有几十个品牌制造商和数百个实际产品型号,除了一个(Apple Watch)之外,所有产品都运行一种或另一种版本的 Android。为此,我将在本书中重点讨论这些。

还有三星的智能手表 Galaxy Gear 2,它使用 Tizen OS,利用 Linux,HTML5,JavaScript 和 CSS3 进行应用开发。我不会在本书中涉及这些,而是专注于三星 Gear S。

Android 5 Wear 软件开发套件(SDK)支持两种不同的智能手表表面类型,圆形和方形,因为手表通常有这两种配置。在第五章中,您将为这两种智能手表类型创建 Android 虚拟设备(avd)(软件仿真器)。

智能眼镜:眼镜和其他智能眼镜制造商

智能眼镜可穿戴消费电子产品类别是下一个增长最快的可穿戴产品类别。品牌眼镜制造商正在争先恐后地进入这个可穿戴领域,所以请尽快关注 Luxottica 的智能眼镜。因此,这将是本书的第二个重点。

智能眼镜一般会运行谷歌眼镜开发套件(GDK)或 Android 4.x,2015 年你可以期待 Android 5 智能眼镜可穿戴设备。有很多智能眼镜公司,包括谷歌、Vuzix、GlassUp、索尼、six15 和 Ion。谷歌当然已经停止生产这款眼镜,并承诺未来会推出更好的新产品。

可穿戴应用编程接口

有两个主要的应用编程接口(API),它们都运行在谷歌 Android Studio 下,可用于访问可穿戴设备的功能,这些功能在 Android 5 版本中尚未成为标准,该版本横跨智能手机和平板电脑等主流设备。智能手表 API 叫做 Wear SDK ,智能眼镜 API 叫做眼镜 GDK??。需要注意的是,一些可穿戴设备可以运行完整的 Android 操作系统(OS)。

智能手表的例子是 Neptune Pine 智能手表,它运行完整的 Android 操作系统,谷歌眼镜产品不要求你使用谷歌眼镜 GDK,除非你需要使用谷歌眼镜的特殊功能或想要开发“原生”眼镜应用。换句话说,谷歌眼镜将运行在普通智能手机和平板电脑上运行的 Android 应用。

这意味着 Neptune Pine 和谷歌眼镜可以运行您为其他 Android 设备开发的相同应用。Neptune Pine 产品线的新版本将利用 Wear SDK,这在很大程度上是我将在本书范围内讨论的内容。

Android Studio 1.0:Android Wear SDK

Android Wear SDK 是谷歌创建的用于 Android 可穿戴设备(运行在 Android 上的可穿戴设备)的 API。

它于 2015 年初通过 Android 开发者网站推出,同时推出了几个定制的“垂直”API,包括 Android Auto SDK(用于汽车)、Android TV SDK(用于 2K 或 4K iTV 电视机)和 Android Wear SDK(用于智能手表)。目前,Wear SDK 的目标是智能手表,但后来它可能会扩展到其他可穿戴设备,如鞋子、帽子等。

Android Wear SDK 提供了一个统一的 Android 可穿戴设备开发平台,可以跨多个智能手表产品。在 Wear SDK 推出之前,智能手表制造商必须要么提供自己的 API,就像索尼智能手表 One 和 Two 在 2014 年所做的那样,要么支持完整的 Android 4 操作系统,就像 Neptune Pine 在 2014 年所做的那样。

这里需要注意的是,这个 Android Wear SDK 并没有提供单独的操作系统,实际上是 Android 5 OS 的一个扩展,需要 Android 可穿戴应用的一部分在你的主机 Android 设备上运行。这通常是 Android 智能手机,因为这是最便携的设备,也是连接各种网络和运营商的设备类型。

由于 Android 智能手表代表了可穿戴应用市场的大部分,我将把本书的大部分内容集中在可穿戴应用开发领域,尽管我也会在第十七章中介绍谷歌眼镜。

谷歌眼镜开发套件:安卓或镜像的 GDK

在开发谷歌眼镜可穿戴应用时,你有两种不同的 GDK API 选项。您可以单独使用它们,也可以将它们相互结合使用。此外,还有第三种选择,即不使用任何一种 API 而直接使用 Android 操作系统。让我们仔细看看玻璃的发展。

谷歌眼镜的安卓工作室 GDK:眼镜开发套件

谷歌 Android GDK 是 Android OS APIs(也称为 Android 5 SDK)的一个插件,它允许你构建谷歌所说的玻璃器皿。玻璃器皿包括直接在谷歌眼镜硬件上运行的谷歌眼镜可穿戴应用。

一般来说,如果您需要直接访问谷歌眼镜的独特硬件功能,为您的用户与谷歌眼镜硬件进行实时交互,或者在没有互联网、Wi-Fi、2G、3G 或 4G 蜂窝网络可用的情况下为您的应用提供离线功能,您会希望使用这种 Android GDK 开发方法。

通过将 Android SDK 与 GDK 结合使用,您可以利用广泛的 Android APIs,同时为谷歌眼镜用户设计出色的用户体验。与 Mirror API 不同,使用这个 Android GDK 构建的玻璃器皿可以在 Glass 本身上运行。这允许访问 Glass hardware 的低级、专有(谷歌眼镜独有)产品功能。

仅使用 Android 环境开发谷歌眼镜应用

谷歌设计了 Glass 平台,以使他们现有的 Android SDK 能够在 Glass 上工作。这意味着您可以使用所有现有的 Android 开发工具,您将在第二章中下载并安装这些工具,并且您的玻璃器皿可以使用标准的 Android 应用包(APK)格式交付。

这打开了许多其他 pro Android 开发书籍,如Pro Android Graphics(Apress 2013)或 Pro Android UI (Apress 2014),它们将向您展示如何制作在谷歌眼镜设备上运行良好的可视化 Android 应用。这是因为谷歌眼镜产品旨在运行完整的 Android 操作系统,因此,任何应用都将在其上运行。这意味着你可以开发一个可以在所有安卓设备上运行的应用,包括谷歌眼镜。只要用户不需要在智能手表上运行,除了 Pine 之外,这就允许一次编码,随处交付(高度优化)应用的开发工作流程!

在谷歌眼镜上使用 RESTful 服务:镜像 API

还有一个 API 可以与谷歌眼镜配合使用,完全不依赖于谷歌 Android 操作系统。这就是所谓的 Google Glass Mirror API,也就是通常所说的 RESTful API 。

Mirror API 允许开发者使用他们选择的任何编程语言为谷歌眼镜制作玻璃器皿。RESTful 服务提供了对基于 web 的 API 的简单访问,这些 API 将为应用开发人员完成大部分数据传输的繁重工作。

一般来说,如果您需要使用跨平台的基础设施,如 HTML 或 PHP,需要访问 Google Glass 产品的内置功能,或者需要独立于 Android 操作系统的平台,您会希望使用这个镜像 API。举例来说,这就是你在 iOS 或 Windows 上使用谷歌眼镜的方式。

混合玻璃应用:混合安卓 GDK 和镜像 API

最后,有趣的是,开发者也可以创建“混合”谷歌眼镜应用。这是因为,正如你可能已经怀疑的那样,谷歌眼镜镜像 API 可以与谷歌眼镜安卓 GDK 接口。

这是通过使用菜单项调用镜像 API 代码来完成的,该代码将一个意图对象发送到安卓 GDK API,然后发送到 GDK 应用代码。在本书中,我将使用 Intents,它是一种 Android 平台特定的 Java 对象类型。意图用于在应用、菜单、设备、活动和 API(如 Mirror API)之间进行通信。你甚至可以使用这种混合开发模式来利用现有的 web 属性,这些属性可以启动直接在谷歌眼镜上运行的增强的 i3D 体验。

真正的 Android 或 Android 外设:蓝牙链接

在专业 Android 可穿戴设备的世界中,甚至在某些情况下,在专业 Android 设备的世界中,作为一名开发人员,你需要知道一个区别,Android 产品的营销人员往往会想要隐藏这个区别。这是因为制造一种类型的 Android 设备的成本将非常高(小型化),而制造另一种类型的 Android 设备的成本将非常低,因此利润率将更高,特别是如果公众可以确信产品正在运行 Android 操作系统,而实际上它并没有这样做!

这在 Android 可穿戴产品领域非常明显,包括智能手表和智能眼镜,如谷歌眼镜。一些智能手表是真正的安卓设备;也就是说,它们在智能手表内部有一个计算机处理单元(CPU)、内存、存储、操作系统、Wi-Fi 等。Neptune Pine 就是一个很好的例子。

真正的智能手表设备实际上就像是在你的手腕上戴着一部完整的智能手机,将由电信运营商提供,就像现在的智能手机一样。这款真正的 Android 智能手表将是你唯一的 Android 设备,你将不再需要携带智能手机。嵌入式计算机小型化的进步最终将允许所有智能手表做 2014 年 Neptune Pine 所做的事情,将成熟的 Android 设备放在某人的手腕上。

如果你想知道,我从 TrueHD (HDTV)行业术语中借用了这个“真实”的 Android 描述。TrueHD 是 1920×1080 的分辨率,它是一个必要的描述性修饰符,因为市场上还有另一种更低的 1280×720 分辨率,称为 just HD(我称之为伪 HD)。

其他智能手表不是真正的 Android 设备,可以被描述为现有智能手机、平板电脑或平板电脑的“外设”,这些智能手表使用蓝牙技术成为 Android 设备的扩展,Android 设备具有 CPU(处理器)、内存(应用运行时)、数据存储和电信(Wi-Fi 接入和 4G LTE 蜂窝网络)硬件。

外围 Android 设备显然需要不同的应用开发工作流程,并具有不同的数据优化和测试程序,以实现最佳的性能和用户体验。

显然,因为这本书将着眼于开发一些更受欢迎的 Android 可穿戴设备,所以我将更详细地讨论这个“远程 Android 外设”开发问题,并看看如何设计和优化可穿戴外设应用。

我只是想让你知道,现在有两种完全不同的方法来进行 Android 开发:板载或原生 Android 应用,以及远程或双向(后端)通信 Android 应用功能。

随着蓝牙可穿戴设备和第二屏幕技术的出现(在Pro Android IoT【Apress,2016】一书中有所涉及),随着时间的推移,这将成为 Android 应用开发的一个重要区别,这些扩展 Android 产品将继续出现在市场上。

最重要的是,您需要知道哪种消费电子设备正在托管 CPU、内存、存储和电信硬件,哪种消费电子设备正在托管触摸屏、显示器和输入,以及哪种技术(以及它的速度)正在将这两者连接在一起。这对你优化应用性能的能力很重要,因为用户体验(UX)是基于应用的响应速度和易用性。

可穿戴应用设计:Android 5 材质设计

Android 5 于 2014 年与 Android TV、Wear 和 Auto SDK 插件一起发布,采用了全新的 UI 范式。谷歌称之为材质设计,因为它更懂 3D。纹理或“蒙皮”一个 2D 或 3D 对象涉及到使用媒体设计行业中通常称为的材质

谷歌创建了 Material Design 作为跨谷歌 Chrome OS 和 Android OS 平台,以及跨运行 Chrome OS(Linux 之上的 HTML5、CSS3 和 JavaScript)或 Android 5 OS(64 位 Linux 内核之上的 Java 7、CSS3 和 XML)的消费电子设备的最终用户交互、动画动作和视觉设计的深远 UI 设计指南。

Android 5 操作系统中的一个很酷的功能是支持所有类型的 Android 5 设备上的应用的材质设计,如果你读过《绝对初学者的 Android 应用》一书*(2014 年 4 月),你可能已经知道了。*

在本章以及本书的其余部分,你将了解到如何为 Android 可穿戴设备应用使用材质设计。Android 5,也称为 Android API Level 21(以及更高版本),提供了一些新的组件和新的 OS 功能,专门针对材质设计。

这包括新的 Android 5 主题、用于新查看功能的 Android View 小部件、改进的阴影和动画 API 以及改进的可绘制性,包括更好的矢量缩放、使用 8 位 alpha 的 32 位 PNG 着色以及自动颜色提取 API。我将在本章的剩余部分更详细地讨论所有这些。

安卓材质设计主题:光明与黑暗

这个 Android 5 材质设计主题提供了新的 Android 5 符合风格,用于您的 Android 5 应用。由于 Android Wear SDK 是 Android Studio 1(Android 5 plus IntelliJ)的一部分,这些新主题也将适用于 pro Android 可穿戴设备。你将在第二章第一节安装 Android Studio 以及其他一些开源内容开发软件,在第三章第三节探索 Android Studio 1.x 和 IntelliJ,在第四章第五节探索 Java 7。如果你是为 Android 4 开发,你会使用 HOLO 主题**;**如果是为 Android 5 开发,会使用材质主题。

两个主题。赫萝和主题。材质提供深色和浅色版本。您可以使用自己定义的自定义调色板自定义材质主题的外观,以匹配品牌标识。通过使用材质主题属性,你可以给 Android 操作栏和状态栏着色。

你的 Android 5 小工具有一个新的用户界面设计和触摸反馈动画。您可以自定义这些触摸反馈动画,以及应用的活动过渡。Android 中的活动是应用的一个逻辑部分或 UI 屏幕。我假设你已经了解 Android 的行话,因为这是一本中级到高级水平(专业)的书。

定义耐磨材质主题:使用样式属性

就像以前版本的 Android 一样,材质主题是使用 Android Style 属性定义的。各种材质主题的示例将使用 XML 定义,使用以下 XML 1.0 标记:

@android:style/Theme.Material                     (the default dark UI version)
@android:style/Theme.Material.Light               (the light UI version)
@android:style/Theme.Material.Light.DarkActionBar (a light version with a dark version Actionbar)

正如我提到的主题。材质 UI 风格(或主题)只有 Android 5,API 级及以上才有。v7 支持库为一些 5 之前版本的视图小部件提供了带有材质设计风格的主题,并支持在 Android 5 之前定制调色板。

定义耐磨材质主题调色板:项目标签

如果你想定制你的材质设计主题的原色,以适应你的可穿戴应用品牌,你可以使用 <项目> 标签来定义你的定制颜色,嵌套在 <样式> 标签内,嵌套在 <资源> 标签内,嵌套在 themes.xml 文件内。您创建了一个 AppTheme ,其父属性继承自主题。材质父主题,并使用 colors.xml 文件添加您的自定义颜色引用,该文件使用 xml 标记结构保存十六进制颜色数据。这应该是这样的:

<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <item name="android:colorPrimary">@color/primary</item>
        <item name="android:colorPrimaryDark">@color/primary_dark</item>
        <item name="android:colorAccent">@color/accent</item>
    </style>
</resources>

同样,我假设您了解基本的 Android (Java 和 XML)开发。这里应用使用的样式名是 AppTheme ,它引用了主题的样式。Material 并设置自定义颜色值,设置在一个 colors.xml 文件中,使用 < item > 标签包含您的主题样式常量— colorPrimarycolorPrimaryDarkcolorAccent 。Android 很容易使用这些主题常量,所以你所要做的就是引用它们的自定义颜色值。

定制可穿戴材质主题状态栏:状态栏颜色

您还可以轻松定制主题的应用状态栏。材质,您可以指定另一种适合可穿戴应用品牌的颜色,并提供适当的颜色对比度来显示白色状态图标。要为你的应用状态栏设置自定义颜色,当你扩展一个主题时,添加一个 android:statusBarColor 属性 。材质样式定义。使用前面的示例,您的 XML 应该如下所示:

<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <item name="android:colorPrimary">@color/primary_color</item>
        <item name="android:colorPrimaryDark">@color/primary_dark</item>
        <item name="android:colorAccent">@color/accent_color</item>
        <item name="android:statusBarColor">@color/status_bar</item>
    </style>
</resources>

如上所述,如果你没有特别指定,statusBarColor 常量将继承colorPrimaryDark 常量的值。你也可以使用 Android 5# aarggbb32 位十六进制颜色数据值的 alpha 通道组件在状态栏后面进行绘制。如果你想深入研究 Android graphics,可以看看《Pro Android Graphics*(Apress 2013)这本书。*

例如,如果你想将状态栏显示为完全透明,你可以使用一个**@ Android:color/transparent**常量,它将 alpha 通道设置为零(关闭或 #00000000 )。然而,这并不是一个好的 UI 设计实践,因为你可能在状态栏后面有一个白色的背景,这样会使状态栏图标不可见。

所以你真正想做的是在背景(图像、照片、3D、2D、艺术品)上创建一个带颜色的状态栏。您应该使用深色渐变来确保白色状态图标可见。为此,您可以使用 Android WindowManager 将 statusBarColor 设置为透明,并将 WindowManager 对象的 windowTranslucentStatus 属性的数据值设置为 true。LayoutParams 类(对象)FLAG _ TRANSLUCENT _ STATUS常量。还可以通过 Java 代码使用**window . setstatusbarcolor()**方法实现状态栏动画或半透明的淡入或淡出。

作为一个 UI 设计原则,你的 Android 状态栏对象应该总是与操作栏有一个清晰的界限,除非你在这些栏后面设计自定义 UI 图像或新媒体内容,在这种情况下,你应该使用你的变暗渐变,这将确保图标仍然可见。当您自定义 UI 导航(操作栏)和状态栏时,您应该使它们都透明,或者只更改状态栏的透明度。在所有其他情况下,导航栏应该保持黑色。

自定义可穿戴材质主题:单个视图主题

Android 风格和主题不仅可以用于在全球范围内定制整个可穿戴应用的外观和感觉,还可以用于设计本地屏幕的风格和主题,这些屏幕是应用的组成部分。

你可能会问,为什么要在 Android 5 中为一个单独的视图对象或活动对象开发一个风格或主题呢?

答案可以在 UI 设计的概念模块化 中找到,这是 Android 可穿戴应用开发的一个基石。一旦你使用 XML 文件开发了一个风格和主题,你就可以在任何需要的时候应用它,这可能会在你的可穿戴应用开发过程中多次出现。这样,您只需做一次 UI 设计工作(创建一个模块),然后就可以多次应用它。这也确保了每次都以完全相同的方式应用主题或样式。如果你需要更详细地了解 Android 5 开发的用户界面设计,本书Pro Android UI(2014 年出版)深入讨论了所有的 Android 用户界面设计问题。

你的 XML 用户界面布局容器定义(Android 布局容器从视图组子类化)中的 UI 元素(Android 窗口小部件可以引用一个 android:theme 属性 或者一个 android:style 属性。这允许您以模块化的方式引用预构建的样式和主题资源。

引用其中一个预构建的样式或主题属性将应用该 UI 元素以及该 UI 设计元素中的任何子元素。这项功能对于在可穿戴应用 UI 设计的特定部分更改主题调色板非常有用。

Android 材质设计视图小部件:列表和卡片

Android 5 API 提供了两个全新的视图子类(widgets)。这些可用于显示使用材质设计主题、样式、动画和特殊效果的信息卡或可回收清单。

RecyclerView widget 是 Android ListView 类的即插即用增强版。它支持许多布局类型,并提供性能改进。 CardView widget 允许你的可穿戴应用使用具有一致外观和感觉的“卡片”来显示上下文信息。

在我继续讨论阴影、动画和特殊效果(如可绘制的着色和颜色提取)之前,让我们先仔细看看新的 UI 设计工具。

Androidrecycle viewClass:优化(回收)列表查看

Android RecyclerView 是一个 UI 设计小部件,它是 Android ListView 小部件的一个功能更加丰富的版本。RecyclerView 用于显示大量应用数据列表。该类的独特之处在于视图中包含的数据可以非常高效地滚动。这是通过 RecyclerView ViewGroup(一个布局容器)子类实现的。在任一时刻,它在其 ViewGroup 布局容器中保存有限数量的数据(视图)对象。

这种内存优化原则与数字视频流的工作原理非常相似,只在系统内存中保留当前使用的数据列表部分,这使得该类更快,内存效率更高。当您的数据集合中的数据在运行时会根据应用最终用户的操作或网络事务发生变化时,您可能希望利用 Android 的 RecyclerView 小部件。

RecyclerView类通过向开发人员提供大量软件组件来实现所有这些,可穿戴开发人员可以在他们的代码中实现这些组件。其中包括用于在列表中定位数据视图项目的布局管理器、为数据视图项目操作添加视觉效果的动画,以及为可穿戴应用实现此 RecyclerView 小部件设计自定义布局管理器和动画的灵活性。

Android CardView 类:索引卡组织范例

Android CardView 类是 ViewGroup 布局容器类,扩展了 FrameLayout 类。Android FrameLayout 类允许您显示单个视图 UI 元素(小部件),因此 CardView 将是一个 FrameLayout 单个视图的集合,它是一堆 3x 5 索引卡的范例。这个类允许你在虚拟卡上显示可穿戴应用的任何信息数据,这些虚拟卡在 Android(应用、可穿戴、电视或 auto SDK)平台上具有一致的外观。

您的 CardView 小部件还可以为该 CardView 布局容器中的每张卡片添加阴影和圆角,尽管是 CardView 本身而不是每张单独的卡片添加阴影和圆角。要创建一个有阴影的卡片,需要使用一个card _ view:card levation属性 。

如果您的用户使用的是 Android 5 (API Level 21)或更高版本,CardView 类将访问实际高程属性并自动创建动态阴影,对于更早的 Android 版本,它将基于更早的版本创建可编程的阴影实现。

如果您想增强 CardView 小部件的外观,您可以提供一个自定义的圆角半径值,比如说 6dip,它将使用 cardCornerRadius 属性为 CardView 中的每张卡片创建圆角。

如果你想在你的 CardView 小部件后面显示一个背景图像,你可以提供一个自定义的背景颜色值,比如#77BBBBBB,它将使用cardbbackground color属性为你的 CardView 中的每张卡片创建一个浅灰色的透明背景颜色。

如果你想在 CardView 窗口小部件后面有一个阴影,你可以提供一个自定义的 elevation 值,比如说 5dip,这将使用 cardElevation 属性在 CardView 中的每张卡片后面创建一个漂亮的、高度可见的阴影。在使用 cardElevation 属性之前,您需要将名为 cardUseCompatPadding 的填充兼容性常数设置为 true 值,以便 CardView 计算 dropshadowing (elevation)效果。

要访问这些 CardView 属性,必须为 LinearLayout 父布局容器类和嵌套的 CardView 子布局容器类导入自定义 XMLNS(或 XML 命名架构)。这是通过在每个布局容器标记中使用以下 XML 参数来实现的:

xmlns:card_view=[`schemas.android.com/apk/res-auto`](http://schemas.android.com/apk/res-auto)

一旦设置好了,您就可以使用上面指定的属性,方法是在它们前面加上一个 card_view: 修饰符,这样您的 cardCornerRadius 属性就可以写成例如card _ view:cardCornerRadius

为了实现我在本节前面概述的三个示例,LinearLayout 父布局容器的标记(包含一个包含 TextView 对象的 CardView)类似于下面的 XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              xmlns:card_view="http://schemas.android.com/apk/res-auto" >
    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/my_card_view"
        android:layout_gravity="center"
        android:layout_width="180dip"
        android:layout_height="180dip"
        card_view:cardCornerRadius="6dip"
        card_view:cardBackgroundColor="#77BBBBBB"
        card_view:cardUseCompatPadding="true"
        card_view:cardElevation="5dip" >
        <TextView android:id="@+id/info_text"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
</LinearLayout>

现在让我们来看看材质设计中的特效应用,并学习投影和动画视图部件。

Android 材质设计效果:阴影和动画

虽然 Android 一直有一个阴影和动画功能集,它与 Android View 对象(称为 Android widgets)一起工作,但材质设计通过提供更高级的阴影将这些效果提升到了一个新的水平,以便屏幕上的所有东西都有一个 3D z 轴元素。例如,除文本对象之外的视图对象现在可以访问投影,并且现在有高级的过渡动画效果,如曲线插值运动和在屏幕上模拟 3D 效果的东西,如波纹。

Android 材质设计 3D 效果:自动视图阴影

除了 x 和 y 属性之外,从 Android 中的View类继承而来的 Android widgets 现在增加了第三个特性,z 轴属性。这个属性称为仰角属性,定义了视图对象的高度,进而决定了其阴影的特征。

正如许多熟悉 3D 的人所知,这将 Android UI 设计从 2D 带入了激动人心的 3D 领域。这使得照片般逼真的 i3D UI 设计成为可能,而在以前,只有“平面”的 2D UI 设计才是可能的。

添加这个新的 elevation 属性是为了表示视图对象相对于 UI 设计中它上面和下面的其他视图对象的高程或高度。Android 操作系统将使用 elevation 属性(或者如果您喜欢,属性或特征)来确定阴影的大小,因此具有较大 elevation 值的视图对象(小部件)应该投射较宽的阴影,使小部件看起来处于较高的高度。

UI 设计中的视图小部件也将通过 z 值获得它们的绘制顺序。这通常被称为 z 顺序z 索引,被分配了较高 z 值的 UI 视图对象将总是出现在被分配了较低 z 值的其他视图对象(窗口小部件)之上。

Android 材质设计动画:用户界面的触摸反馈

Android 5 中升级的动画 API 允许你为你的 UI 控件(小部件)创建自定义的触摸反馈动画。它们允许根据视图小部件状态的变化触发这些动画效果,还允许当用户在应用的活动屏幕之间导航时进行活动转换。

动画 API 的材质设计相关增强功能允许您使用新的触摸反馈动画来响应视图小部件上的触摸屏事件。这些实现了新的波纹元素( RippleDrawable 类),并且可以被定义为有界(包含在视图内)或无界(发散出视图边界)。使用 XML 定义它相当简单,尽管它也可以使用 Java 7 来定义。

要定义有界波纹触摸反馈动画,请在视图小部件标签的 android:background 参数中引用它,如下所示:

<Button android:id="@+id/my_rippling_muscles_I_mean_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="?android:attr/selectableItemBackground" />

要定义无界波纹触摸反馈动画,再次使用 View 小部件标签中的 android:background 参数引用它,如下所示:

<Button android:id="@+id/my_rippling_abs_I_mean_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="?android:attr/selectableItemBackgroundBorderless" />

触摸反馈动画现在集成在几个标准视图小部件子类中,比如Button类。一个新的 API 允许您自定义这些触摸反馈动画,以便您可以将它们添加到您的自定义视图中。

用户现在可以使用圆形显示动画来隐藏和显示视图小部件,这为 Android 操作系统增加了另一个级别的惊喜因素。熟悉 2D 和 3D 图形的人会知道,这是通过将动画圆形(ShapeDrawable)剪辑形状应用到两个 UI 小部件视觉效果之间的渲染管道中来实现的。

Android 材质设计过渡:增强的活动过渡

在活动过渡动画区域,您现在可以使用自定义活动过渡动画在活动之间切换。每当用户使用 Intent 对象从一个活动转移到另一个活动时,Android 操作系统都会应用自定义活动转换。

这些活动动画旨在与其他材质设计动画效果结合使用。我怀疑添加这些是为了在整个 Android 5 可穿戴应用中统一 UX 的材质设计。现在,视图和活动对象都提供了预建的动画!你也可以创建自定义的过渡动画,就像在 Android 5 之前一样。

Android 5 材质设计中有四种不同类型的预建活动动画:进入退出控制全屏动画效果,shared elementerSharedElementExit 控制 UI 元素的本地化 UI 元素效果,这些元素是共享(在两个活动屏幕上)。

当用户从可穿戴应用中的另一个活动屏幕切换到新的活动屏幕时,将触发进入活动动画,因此,该进入转换确定活动中的视图窗口小部件如何进入屏幕。例如,在分解过渡中,视图小部件从屏幕外部进入屏幕,飞向屏幕中心。确保在你的活动中使用图形设计来增强这种过渡的特殊效果。

相反,当用户退出他们的可穿戴应用中的活动屏幕时,可以触发退出类型的活动动画。退出过渡将决定可穿戴活动中的视图小部件如何退出屏幕。例如,使用分解过渡示例,在退出过渡中,您的可穿戴应用视图窗口小部件将退出屏幕,远离中心,与进入分解过渡动画相反。

如果两个活动屏幕之间有共享的 UI 元素,那么共享元素转换可以应用于这个 UI 设计场景。正如您可能已经猜到的,这些被称为 SharedElementEnter 和 SharedElementExit 转换。SharedElement 转换决定了在两个活动屏幕之间共享的视图小部件将如何处理这些活动屏幕之间的转换。

例如,如果两个活动屏幕具有相同的数字图像,但其位置或分辨率不同,则 changeImageTransform 共享元素过渡将在两个活动屏幕之间平滑地转换(重新定位)或缩放(调整大小)图像。

还有其他共享元素转换,比如 changeBounds 共享元素转换,它将动画显示任何目标活动视图小部件的布局边界的任何变化。还有一个 changeTransform 共享元素转换,可以动画显示两个正在转换的活动屏幕之间目标视图小部件的缩放(大小)和旋转(方向)的任何变化。最后,有一个 changeClipBounds 共享元素转换,它将为目标活动视图小部件的剪辑路径边界中的任何变化制作动画,这些小部件被分配了剪辑路径。

Android 5 现在支持三种主要的进入和退出转换;这些也可以与共享元素转换结合使用。有爆炸过渡,它将视图小部件移入或移出屏幕中心,滑动过渡,它将视图小部件滑入或滑离场景边缘,以及渐变过渡,它通过改变视图小部件的不透明度值来添加或移除它们。

您可能想知道是否有任何方法可以创建自定义过渡。这是通过使用 Visibility 类创建一个定制的 transition 子类来实现的,Visibility 类是Transition类的一个子类,就是为了这个目的而创建的。

Android 材质设计运动:增强的运动曲线或路径

那些对 3D 动画软件(如 Blender3D)或数字视频编辑软件(如 Lightworks)有经验的人应该熟悉使用运动曲线来控制视频剪辑或场景中 3D 对象移动的速度变化率的概念。

这被称为运动曲线,因为它允许你精确地控制某物随时间移动的方式,这在电影制作、角色动画和游戏设计中很重要。还有另一个密切相关的工具叫做运动路径。运动路径定义了对象如何在 2D 或 3D 空间中移动。

因此,运动曲线是用于定义时间动画属性(动画速度随时间的变化)的工具,而运动路径是用于定义空间动画属性的工具。

Android 操作系统中的动画,以及新的 Android 5 材质设计,都依赖于这些使用插值器类的运动曲线。这个类现在可以用来定义更复杂的 4D 运动曲线插值(第四维,或 4D,意味着随时间的变化)。“材质设计”现在添加了运动路径来支持 2D 空间运动模式,因此现在不仅可以控制运动的速率,还可以控制运动发生的位置。

路径插值器类是一个基于贝塞尔的新插值器子类,贝塞尔是一种复杂类型的曲线定义数学。贝塞尔曲线在 Android 5 中已经实现为路径(类)对象。这个插值器类可以在 1 乘 1 的正方形中指定贝塞尔运动曲线,锚点在 0,0 和 1,1,并带有自定义的 x,y 控制点,这是开发人员使用 pathInterpolator 类的构造器方法参数指定的。您通常会使用 XML 资源定义一个 PathInterpolator 对象,如下所示:

<pathInterpolator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:controlX1="0.5"
    android:controlY1="0"
    android:controlX2="1"
    android:controlY2="1" />

这个 Android 5 操作系统为材质设计规范中的三个基本的新运动曲线提供了 XML 资源。这些将使用标记,并在您的 XML 标记或 Java 代码中引用,使用@interpolator/路径引用头,如下所示:

@interpolator/linear_out_slow_in.xml
@interpolator/fast_out_linear_in.xml
@interpolator/fast_out_slow_in.xml

Android 材质设计动画状态变化:statelistantimator

Android 状态变化,如手机上的信号指示器,现在可以使用新的 Android 5 材质设计功能集进行动画制作。这将允许可穿戴应用开发人员在其 Android 可穿戴应用设计中添加更多令人惊叹的元素。

新的 Android StateListAnimator 类允许开发人员使用 ObjectAnimator 对象,每当视图对象的状态改变时,这些对象就会被 Android 操作系统触发(运行)。将 StateListAnimator 设置为 XML 资源的方式利用了 <选择器> 标签(在不同的状态中进行选择)和 <设置> 标签(创建选择集),以及定义状态的 <项目> 标签和定义对象动画的 <对象动画器> 标签。一个简单的 pressed=truepressed = falsestatelistantimator 选择器对象以这种方式建立,使用四层(深层)嵌套 XML 结构:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_pressed="true" >
      <set>
         <objectAnimator android:propertyName="translationZ"
             android:duration="120"
             android:valueTo="5dip"
             android:valueType="floatType" />
      </set>
   </item>
   <item android:state_pressed="false"
         android:state_enabled="true"
         android:state_focused="true" >
      <set>
         <objectAnimator android:propertyName="translationZ"
             android:duration="120"
             android:valueTo="0"
             android:valueType="floatType" />
      </set>
   </item>
</selector>

要将定制的状态变化动画附加到视图中,使用 XML 资源文件中的<selector>元素定义一个 ObjectAnimator,如上所示。接下来,使用Android:stateListAnimatorXML 参数在您希望受其影响的视图对象 XML 标记中引用它。

要将动画 StateListAnimator 中的这种状态变化分配给 Java 代码中的视图,您应该利用一个**animation inflater . loadstatelistanimator()方法调用,然后记住使用View . setstatelistanimator()**方法调用将这个 ObjectAnimator 分配给您的视图。

重要的是要记住,每当你的可穿戴应用主题扩展一个主题。材质材质设计主题,UI 按钮对象默认启用 z 动画(设置和激活)。为了避免 UI 按钮对象中的这种行为,在 XML 标记中将这个Android:statelistantimator属性设置为数据值 @null ,或者在 Java 代码中设置为“ null

接下来,让我们看看 Android 5 在 Android 4.x 中已经存在的大量 Android Drawable 类中添加了什么,以便能够通过动画矢量、位图图形、着色功能、颜色提取和新状态动画图形来提供这种大大增强的材质设计功能。

Android 材质设计图形处理:Drawables

还有一些新的用于材质设计的可绘制 API 功能,使得使用 Android 可绘制对象来帮助您为您的应用实现流畅的材质设计变得更加容易。新的 Android Drawable 类包括 VectorDrawable、AnimatedVectorDrawable、RippleDrawable、Palette 和 AnimatedStateListDrawable,所有这些我将在本节中讨论。

这些新的 Android 5 可绘制类为 Android 操作系统添加了可扩展矢量图形(SVG)路径支持、变形、i3D 波纹特效、调色板颜色提取和多状态可绘制对象的动画过渡。Android 5 增加了一些非常强大的类,涉及到 2D 矢量和位图图形!

Android 5 可绘制调色:。setTint( ) 和*。setImageTintMode( )*

使用 Android 5 及以上版本,可以着色 BitmapDrawable 对象以及 NinePatchDrawable 对象。您可以对整个数码图像对象进行着色,或者将这种着色效果限制在某些像素上。这是通过定义 alpha 通道来“掩盖”着色效果来实现的。

您可以使用 Android 颜色类资源或引用这些颜色类资源的 Android 主题属性来着色这些可绘制对象。通常,您只需创建一次这些资源,然后在您的可穿戴应用中使用它们,使用着色功能根据需要给它们着色,以匹配您的主题。正如您所想象的,您可以使用它来进行优化,因为您在整个应用中使用的图形图像资源要少得多。

您可以使用为可穿戴应用的 Java 代码中的 BitmapDrawable 或 NinePatchDrawable 对象应用色调。setTint( ) 方法。还可以在 XML UI 布局容器定义中设置色调颜色和色调模式。这是通过使用视图对象标签中的 android:tintandroid:tintMode 参数(属性)来实现的。

Android 5 矢量可绘制对象: VectorDrawable

新的 Android 5 VectorDrawable类和使用该类创建的对象可以在不损失任何质量的情况下放大或缩小。这是因为,与位图图像不同,矢量图像由代码和数学(线条、曲线、填充和渐变)组成,而不是像素。因此,如果发生缩放,矢量图像实际上将被渲染以填充可用于显示它的像素数量。矢量图像在缩放时不会像基于像素的图像那样被重新采样,而是会被重新渲染以适应新的屏幕分辨率,无论是 320 x 240 的智能手表还是 4096 x 2160 的 iTV。

出于这个原因,矢量图像可以从可穿戴设备一直使用到 4K 独立电视,具有相同的视觉质量。使用位图图像是不可能的。因为矢量图像是基于文本的,所以它的数据密度至少比位图图像高一个数量级,因为矢量是代码(数学和文本),而不是数据密集型像素值的数组。

正如你可能想象的那样,矢量图像非常适合单色应用图标。矢量图像只需要一个图像资源,与位图图像格式相反,位图图像格式需要为每个屏幕密度提供一个资源文件。要创建一个矢量图像,您需要在一个<vector> XML 父标签中为形状定义 SVG 数据。定义彩色填充正方形的 SVG 矢量图像的 XML 标记如下所示:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:height="320dip"
        android:width="320dip"
        android:viewportWidth="160"
        android:viewportHeight="160" >
        <path android:fillColor="#AACCEE"
              android:pathData="M0,0 L0,100 100,100 100,0 Z" />
</vector>

SVG 图像使用 VectorDrawable 对象封装在 Android 5 中。有关 SVG 路径命令语法的信息,请参见 W3C 网站上的 SVG 路径参考(http://www.w3.org/TR/SVG/paths.html)。我在《Java 8 游戏开发入门(2014 年出版)一书中也深入讨论了这一点,因为 Java 8 和 JavaFX 拥有广泛的 SVG 路径支持。

你还可以通过制作 VectorDrawable 对象的 SVG path 属性动画来模拟流行的多媒体软件类型,称为扭曲变形,这要归功于另一个全新的 Android 5 类 AnimatedVectorDrawable。

接下来让我们仔细看看所有新的 Android 5(自动)颜色提取功能,这些功能是由 Android Palette 类提供的。

Android 5 自动调色板提取:调色板

Android 5 增加了一个新的调色板类,它有助于一个颜色提取算法,允许开发人员从你的应用中的位图图像素材中自动提取突出的颜色。Android 支持库 r21 和更高版本包括 Palette 类,它允许您在版本 5 之前的 Android 应用版本中从图像中提取突出的颜色,例如 Android 3.x 和 Android 4.x 应用。调色板将从位图图像的色谱中提取以下类型的突出颜色:

  • 响亮的
  • 充满活力的黑暗
  • 明亮的光线
  • 柔和的
  • 柔和的暗色
  • 柔和的光线

Palette 类是一个助手类,它帮助开发人员提取六种不同的颜色分类(如上所列)。要使用这个助手类,您可以将想要调色板化的位图对象传递给调色板类的**。生成【位图图像】的方法,使用下面的方法调用:**

Palette.generate(Bitmap imageAssetName);

请确保在加载图像资源的后台线程中执行此操作。如果不能使用后台线程,也可以调用调色板类的**。generateaync()**方法,提供一个监听器代替,像这样:

public AsyncTask<Bitmap, Void, Palette> generateAsync (Bitmap bmp, Palette.PaletteAsyncListener pal)

您还可以使用调色板类中的 getter 方法从图像中检索突出的颜色,如**。getVibrantColor( )** 或**。getMutedColor( )** 。一个**。generate( )** 方法将返回一个 16 色调色板。如果需要更多,可以用另一个(重载)。generate( ) 方法采用如下格式:

Palette.generate(Bitmap image, int numColorsInPalette);

我查看了这个调色板类的源代码,似乎没有任何你可以要求这个类提供的最大颜色数(大多数调色板最大值是 8 位颜色,或 256 种颜色)。这为这个类提供了一些非常有趣的应用,因为它不依赖于 8 位颜色。调色板中要求的颜色越多,处理时间就越长。这就是为什么有一个 AsyncTask < > 版本的**。generate( )** 方法调用!

要在可穿戴设备应用的 IntelliJ 项目中使用 Palette 类,您需要将以下 Gradle 依赖项添加到应用的模块中:

dependencies { ... (default Gradle dependencies remain in here)
               compile 'com.android.support:palette-v7:21.0.+'  }

Android 5 状态动画:一个AnimatedStateListDrawable

除了新的 Android RippleDrawable 类和 VectorDrawable 类之外,还有一个全新的 AnimatedStateListDrawable 类,它可以创建 StateListDrawable 对象之间的动画过渡。

Android AnimatedStateListDrawable 类允许您创建可绘制对象的动画状态列表(因此有了类名),该类在引用的视图小部件的状态变化之间调用动画。Android 5 中的一些系统小部件将默认使用这些动画。下列范例显示如何使用 XML 资源来定义 AnimatedStateListDrawable:

<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/pressed"
          android:drawable="@drawable/drawable_pressed"
          android:state_pressed="true" />
    <item android:id="@+id/focused"
          android:drawable="@drawable/drawable_focused"
          android:state_focused="true" />
    <item android:id="@id/default"
          android:drawable="@drawable/drawable_default" />
    <transition android:fromId="@+id/default"
                android:toId="@+id/pressed" >
          <animation-list>
                <item android:duration="85"
                      android:drawable="@drawable/asset1" />
                <item android:duration="85"
                      android:drawable="@drawable/asset2" />
          </animation-list>
    </transition>
    <transition android:fromId="@+id/pressed"
                android:toId="@+id/default" >
          <animation-list>
                <item android:duration="85"
                      android:drawable="@drawable/asset2" />
                <item android:duration="85"
                      android:drawable="@drawable/asset1" />
          </animation-list>
    </transition>
</animated-selector>

<动画选择器> XML 定义的上半部分定义了状态,使用 <条目> 标签指定每个状态,下半部分定义了过渡,使用(惊奇) <过渡> 标签,其中嵌套了 <动画列表> 标签。

你将从这本书中学到什么

这本书将重点介绍 Android 5 操作系统和 IntelliJ IDEA **、的那些功能,这些功能用于使用 Android Studio 和 Wear SDK 创建 Android 可穿戴应用。如果你需要基础的 Android 5 应用开发知识,或者想学习如何为 Neptune Pine(或另一款不使用 Wear SDK 的智能手表)创建可穿戴应用,可以看看我的书绝对初学者的 Android 应用(第三 e 2014,Apress)。

这本书的第一部分将为这本书的其余部分奠定基础,包括这一章涵盖可穿戴类型、概念和 Android 操作系统的新 Android 5 材质设计。然后,您将建立一个开发工作站,浏览 Android 的可穿戴功能,并了解新的 IntelliJ IDEA。在本书中,您还将设置用于测试可穿戴应用的模拟器。

本书的第二部分将向您展示如何使用 Wear SDK 为智能手表创建可穿戴应用。您将了解 Android 技术中对于可穿戴应用开发人员来说非常重要的领域,例如创建和交付可穿戴应用、通知、数据层、同步和用户界面布局设计、使用卡片和列表。

这本书的第三部分将解释如何使用 Android Watch Faces API 创建智能手表面孔。您将了解如何创建手表面孔服务,如何将手表面孔绘制到屏幕上,如何设计 Android 手表面孔,如何优化手表面孔以获得最佳性能,如何显示手表面孔设计中的信息(数据),以及如何为手表面孔创建手表面孔应用配置屏幕。

摘要

在第一章中,你看了一下可穿戴设备的类型和概念,并了解了谷歌为 Android 5 操作系统添加的许多新功能。你看了蓝牙 LE,材质设计,新的可绘制类型,高级 3D 比如 OpenGL ES 3.1。

在下一章中,您将把您的开发工作站和所有开源软件放在一起,您将能够使用它们来开发您的高级 pro Android 可穿戴应用。

二、设置 Android5 可穿戴设备应用开发工作站

现在你已经有了一些关于可穿戴设备的基础知识,以及 Android 5 增加了什么让可穿戴应用令人难忘,本章将帮助你建立另一种类型的基础。您的开发工作站是实现 Pro Android 可穿戴设备应用开发目标的最重要的硬件和软件组合。在这里,我将花一些时间预先考虑您将需要的硬件和软件基础设施,您将需要将一个专业的、全面的、Android 软件开发工作站与您的软件开发箭筒中的一打箭放在一起(奇怪的类比组合,不是吗?罗宾汉和棒球)。然后,无论你开发什么类型的可穿戴应用,你都将拥有这本书剩余部分所需的一切!

我们还将摆脱所有那些关于组装一个 100%专业的 Pro Android 可穿戴设备生产工作站的繁琐任务。

因为本书的读者通常希望使用相同的 Android 可穿戴应用软件开发环境进行开发,所以我将在本章概述所有步骤,以组装一个完全精心设计的 Android Studio 开发工作站。你需要这样做,因为本书的所有读者都需要平等地体验你在本书课程中学到的一切。您将了解在哪里下载以及如何安装这个星球上最令人印象深刻的一些开源软件包!

创建 Android 工作站的工作流程

看完硬件需求后,你要做的第一件事是下载并安装整个 Java 软件开发包 (SDK) ,甲骨文称之为 Java SE 7 JDK (Java 开发包)。从 Android Studio 1.0 开始,Android OS 使用 Java 标准版(SE)版本 7 更新 71。Android Studio 1.2 使用 Java 7 update 79,在我对这本书进行第二次编辑时,我刚刚升级到它。当你读到这篇文章时,它很可能使用的是比那更高的版本!这就是软件开发的本质。

需要注意的是,Java 版本 8 也存在,并于 2014 年第二季度发布。Java 8 包含了强大的 JavaFX APIs,将 Java 编程语言变成了强大的新媒体引擎。Java 7 对 JavaFX 的支持确实存在于 Android OS 之外,如果你想使用 JavaFX,有一个让 JavaFX 新媒体应用在 Android 5 下工作的工作流程。因此,开源开发(Android OS、XML、Java7、Java8、JavaFX、HTML5、CSS、JavaScript 和 OpenGL)的未来已经到来!

你将下载并安装的第二个东西是 Android Studio ,你可以从谷歌 developer.android.com 的网站获得。Android Studio 1.0 实际上是一个软件包,由IntelliJ IDEA**(Android 集成开发环境)和一个 Android 开发工具 ADT 5 插件组成。在 Android 4.4 之前,Eclipse IDE、Android SDK 和 ADT 插件都是单独安装的,这使得安装很困难。**

这个 ADT 插件现在是 Android Studio 不可或缺的一部分,桥接****Android SDK,它也是 Android Studio 下载的一部分,带有 IntelliJ IDEA 的版本 14。ADT 插件将这种 IntelliJ Java 思想融入 IntelliJ Android Studio 思想。值得注意的是,IntelliJ 仍然可以用于简单的 Java SE 7 应用开发。IntelliJ 还支持 Java 8 和 JavaFX。

在你的 Android Studio 可穿戴设备应用开发环境建立之后,你将下载并安装新媒体素材开发工具,这些工具将与 Android Studio 结合使用(但不在 Android Studio 之内),用于数字图像编辑(GIMP)、数字视频编辑和特效(EditShare Lightworks)、数字音频混音、甜味和编辑(Audacity)以及 3D 建模、渲染和动画(Blender)等。

您将下载和安装的所有这些软件开发工具将接近匹配昂贵的付费软件包的所有主要功能集,例如来自 Apple (Final Cut Pro)、Autodesk (3D Studio Max)或 Adobe (Photoshop、Premiere 或 After Effects)的软件包。

开源软件可以免费下载、安装甚至升级,并且每天都在不断增加功能,变得越来越专业。在过去的十年或二十年里,你会完全惊讶于开源软件包变得多么专业;如果你还没有经历过这些,你将会以一种主要的方式经历这些!

Android 开发工作站:硬件基础

因为您将在本章中整合本书期间使用的 Pro Android 可穿戴设备应用开发工作站的基础,所以让我们先花点时间回顾一下 Android Studio 1.0 开发工作站的硬件要求,因为这是影响您开发性能(速度)的因素。这显然和软件本身一样重要,因为硬件运行软件。

Android Studio 的最低要求包括 2GB 内存、 2GB 硬盘空间、720p 高清 ( 1280 乘 800 )显示屏。接下来,让我们讨论一下使用 Android Studio 可穿戴工作站需要什么,从将 1280 x 800 的高清显示器升级到1920 x 1080的真正高清显示器开始!

我建议至少使用一个英特尔 i7 四核处理器,或者一个 AMD 64 位八核处理器,至少有 8GBDDR3 1600 内存。我用的是八核 AMD 835016GBDDR3 1866 。英特尔也有一个六核 i7 处理器。这相当于拥有 12 个内核,因为每个 i7 内核可以托管两个线程;同样,对于 64 位操作系统线程调度算法来说,i7 四核应该看起来像八个内核。

也有高速 DDR3 1866DDR3 2133 时钟速度内存模块组件可用。数字越大,表示内存访问速度越快。要计算内存循环的实际兆赫速度,将该数字除以 4 (1333 = 333Mhz,1600 = 400Mhz,1866 = 466Mhz,2133 = 533Mhz 时钟速率)。内存访问速度是一个主要的工作站性能因素 ,因为您的处理器通常会受到处理器内核访问它需要处理的数据(在内存中)的速度的“瓶颈”限制。

当您的工作站运行时,所有这些高速处理和内存访问都在您的工作站内部进行,因此保持一切冷却也很重要,这样您就不会遇到“散热问题”我建议使用宽全塔式机箱,带120 毫米200 毫米散热风扇(至少一两个),以及 CPU 上的系留液体感应散热风扇。需要注意的是,系统运行的温度越低,运行的速度就越快,持续的时间也就越长,所以在工作站上安装大量的静音风扇吧!

如果你真的想要最大的性能,特别是在模拟 AVDs (Android 虚拟设备)进行快速原型开发或测试时,我将在第五章中介绍,安装一个 SSD (固态硬盘)驱动器作为主硬盘驱动器,您的应用和操作软件将从这里加载。为您的 *D:* 硬盘使用传统的 HDD (硬盘驱动器)硬件,用于较慢的数据存储。

就操作系统而言,我使用的是 64 位 Windows 8.1 操作系统,它的内存效率相当高。Linux 64 位操作系统的内存效率极高。我推荐使用 64 位操作系统,这样你就可以寻址 3GB 以上的内存了!

Android 开发工作站:软件基础

为了创建一个全面的 Android 应用开发工作站,您将安装我将在本书后面向您介绍的所有主要类型的开源软件。首先,您将安装 JavaSE 7、Android Studio 以及 Gimp、Lightworks、Blender3D 和 Audacity,它们也都是开源软件包和编程语言(Android 使用 Java、XML、CSS 和 HTML5)。因此,你将组装一个 100%开源的工作站(除非你使用的是 Windows 8.1 操作系统,这是一个付费软件)。我还在本章末尾推荐了其他的免费软件,这样你就可以组装一个大型生产工作站了!

因为开源软件已经达到了付费开发软件包的专业水平,也因为我希望你们所有人都能够参与进来,所以我也会使用开源。使用开源软件包,如 Java、IntelliJ、Blender3D、GIMP、Audacity、Lightworks 等,您可以组装一个免费的新媒体应用开发工作站,与付费软件工作站相媲美,后者可能要花费您所在国家的几千个货币单位(仅是为了使本书国际化)。

对于那些刚刚购买了新的 Pro Android 可穿戴开发工作站 PC 并打算从头开始组装整个开发软件套件的人,我将介绍一个完整的工作流程,从 Java 7 开始,然后添加 Android Studio,最后是每个主要类型的各种媒体内容开发软件包:数字图像、数字视频编辑、3D 和数字音频编辑。如果你有 Macintosh,大多数开源软件都支持该平台以及流行的 Linux 发行版,甚至 Oracle 的 Open Solaris。

Java 7:为 Android Studio 安装基础

你要做的第一件事是访问 Oracle 网站,下载并安装最新的 Java 7 JDK 环境,在撰写本书时,该环境是 Java SE 7u71 、,如图图 2-1 所示。

9781430265504_Fig02-01.jpg

图 2-1 。Oracle TechNetwork 网站 Java SE 7 下载部分;为您的操作系统找到最新的 Java SE 7 JDK

网址在图 2-1 的地址栏里,或者你可以简单 Google Java SE 7 JDK 下载。这将为您提供 Java web 页面的最新链接,我也将把它放在这里,以防您想简单地剪切和粘贴它:

[www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)

将网页右侧的滚动条拉到页面中间,显示 Java SE 开发工具包 7u71 (或更高版本7u 79)下载链接表,如图 2-1 最底部的所示。你也可以阅读位于下载链接表正上方的新 CPU 和 PSU Java 发布版本的解释;例如,在本书中,我将使用 Java 7u71。

一旦您点击此下载链接表格左上角的接受许可协议 单选按钮,链接将变为粗体,您将能够点击您想要使用的链接。如果您使用的是 Windows,并且您的操作系统是 64 位,请使用 Windows x64 链接,否则请使用 Windows x86 链接。我在我的 Windows 7 和 Windows 8.1 工作站上使用的是这些链接中描述的“Windows x64”,这是 Windows 的 64 位版本。

确保使用这个 Java SE 开发工具包 7u71 下载链接,不要使用 JRE 下载(Java 运行时版)链接。JRE 是 JDK 7u71 的一部分,因此您不必担心单独获得 Java 运行时。如果您想知道,您将确实使用 JRE 来启动和运行 IntelliJ IDE,,并且您将使用该软件包内的 JDK 来提供 Java 核心类基础,该基础用作 Android OS 基于 Java 的 API 类的基础。

确保而不是从普通(当前、最新的 Java)下载页面下载 JDK 8u25 或 JDK 8u25 捆绑包,其中包括 NetBeans 8.0,因为 Android 5 使用 Java 7u71 和 IntelliJ IDEA,而不是【the NetBeans 8.0.1 IDE 作为其 ADT 插件,所以在您的工作过程中要非常小心这个特定的初始 Java 7 JDK 基础软件安装步骤!

实际上,我在 JavaFX 开发中使用了不同的 Windows 7 工作站,其中安装了 Java SE 8u25 和 NetBeans 8,我还有另一个 HTML 开发工作站,其中安装了 Java SE 8u25 和 NetBeans 8.0(仅限)。

在运行此安装之前,您应该使用您的 Windows 控制面板,通过添加或删除程序 (XP 和更旧版本)或程序和功能 (Windows Vista、7 和 8.1)工具,删除您的旧版本 Java。

这将是必要的,尤其是如果您的工作站不是全新的,那么您最新的 Java SE 7u71 和 JRE 7u71 是目前安装在 Android Studio 可穿戴工作站上的唯一 Java 版本。

安装可执行文件下载完成后,打开它,双击 EXE 文件启动设置对话框,在系统上安装最新的 Java SE 7u71 JDK,如图 2-2 左侧所示。点击下一个按钮进入自定义设置对话框,如图 2-2 中间所示。再次点击下一步按钮,进入提取安装程序进度对话框,如图图 2-2 右侧所示。提取安装软件后,您可以选择安装文件夹。

9781430265504_Fig02-02.jpg

图 2-2 。Java SE 7 JDK 提取;单击“下一步”按钮继续提取

使用图 2-3 左侧显示的目标文件夹对话框中默认的C:\ program files \ Java \ JRE 7,然后点击下一步按钮。这将在该文件夹中安装 Java 运行时版本(JRE)版本。

9781430265504_Fig02-03.jpg

图 2-3 。Java 7 JDK 安装;单击“下一步”按钮进行安装,然后关闭按钮

有趣的是,出于某种原因,安装程序没有要求您指定 JDK 文件夹名称,可能是因为它希望 Java JDK 始终是一个固定的名称。这个 JDK 文件夹将被命名为C:\ program files \ Java \ JDK 1 . 7 . 0 _ 71,你会注意到在内部 Java 7 实际上被称为 Java 1.7.0。因此 Java 6 应该是 1.6.0,Java 8 应该是 1.8.0。例如,如果您正在使用搜索工具查找 Java 版本,或者只是为了炫耀,了解这一点是很有用的!

一旦你点击下一步按钮,你将得到 Java 安装进度对话框,如图 2-3 中的中间所示。一旦 Java 7 完成安装,你将最终看到你的完成对话框,可以在图 2-3 的右侧看到。恭喜你!您已经成功安装了 Java!

请记住,您没有下载 JRE 的原因是因为它是 JDK 安装的一部分。这个 Java Runtime Edition 是一个可执行程序(平台),一旦您的 Java 软件被编译成应用,它就可以运行该软件,因此需要最新的 JRE 来运行 IntelliJ,正如您现在所知道的,IntelliJ 是 100%完全使用 Java SE 平台编写的。

一旦 Java 7u71(或更高版本)JDK 安装在您的工作站上,您就可以从developer.android.com网站下载并安装最新的 Android Studio 软件安装程序。随着你安装的每一层 Pro Android 可穿戴设备开发软件,这变得越来越令人兴奋!

您还可以使用相同的程序和功能控制面板中的添加或删除程序工具,您可能最近使用过它来删除旧的 Java 版本,甚至确认新的 Java 安装是否成功,以删除当前可能安装在您的 Android 开发工作站上的任何 Android 4 开发环境的任何旧版本。

现在你已经准备好在 Java 7 之上添加第二层 Android 可穿戴应用开发软件(Android Studio 1.0 和 IntelliJ)。

Android Studio 1.0:下载 Android 5 创意

此过程的第二步是访问developer.android.com网站,从 Android 开发者网站的/sdk/文件夹下载并安装 Android Studio 软件安装程序文件,网址如下:

[`developer.android.com/sdk/index.html`](https://developer.android.com/sdk/index.html)

在 Android 开发者网站的主页上,点击网站主页左下方的Get SDK按钮即可进入该页面。这将把你带到本网站的 SDK 部分,如在图 2-4 的右侧所示。你也可以从 Android Studio 概述页面进入网页,如图 2-4 左侧的。Android Studio 概览页面位于以下 URL:

[`developer.android.com/tools/studio/index.html`](http://developer.android.com/tools/studio/index.html)

一旦进入 Android Studio SDK 页面,点击左下方的下载 Android Studio 灰绿色按钮,下载 Android Studio for Windows,如图图 2-4 所示。这将带你到一个下载页面。

9781430265504_Fig02-04.jpg

图 2-4 。Android Studio 下载链接(左)和下载页面(右);点击绿色的下载 Android Studio 按钮

如图 2-5 中的所示,实际的 Android Studio 下载页面在顶部包含一个部分,概述了 Android 软件开发工具包许可协议。该协议通常被称为最终用户许可协议(EULA), ,它规定了您可以和不可以使用 Android 5 Studio SDK、IDEA、软件、工具、编解码器和 APK(应用包)做什么。

9781430265504_Fig02-05.jpg

图 2-5 。选择“我已经阅读并同意条款和条件”复选框,然后单击蓝色的下载 Android Studio for Windows 按钮

仔细阅读本网页的条款和条件部分,如有必要,与您的法律部门一起,然后点击底部声明旁边的复选框,内容为:我已阅读并同意上述条款和条件,如图 2-5 中以红色突出显示的内容。

一旦这个复选框被激活(选中),你现在应该可以看到一个蓝色的下载 Android Studio for Windows 按钮。下载站点会自动检测您的操作系统,以及您的操作系统支持的位级别(32 位或 64 位)。这应该与工作站相匹配,所以如果你有 64 位处理器(CPU),你也应该有 64 位操作系统。

如果您下载了用于 Windows x64 或 Linux x64 的 Java 7u71 JDK,那么您将拥有 64 位版本的 Android Studio 相反,如果您为 32 位 x86 操作系统选择了 Java 7u71,那么您将拥有 32 位版本的 Android Studio。

激活后,点击下载 Android Studio 蓝色按钮,开始下载过程。如果你的网络连接速度很慢(调制解调器或 ISDN),这可能需要一两个小时。如果有 DSL 或 4G 连接,大概需要半个小时。如果你有光纤连接,应该只需要一两分钟。

下载完成后,您将启动一个软件安装程序,该程序将设置 Android 5 SDK 和集成开发环境(IDE ),以便在您的 Pro Android 可穿戴设备开发工作站上使用。这些文件以前是用 ZIP 文件安装的,所以这是一个很大的改进!值得注意的是,这些文件的大小也是随时变化的,所以如果在你写这本书的时候和你写这本书的时候之间 SDK 发生了变化,它们可能会有所不同。

在这个 Android Studio“捆绑包”在版本 4 中可用之前,设置这个 Android IDE 是一个复杂的过程,需要大约 50 个或更多的步骤。这些包括安装 Java SDK,然后是 Android SDK,然后是 Android 插件,然后配置插件以查看 Android SDK。现在设置 Android 5 开发环境简单多了!

新的捆绑方法通过包括 IntelliJ IDE 以及所有 Android SDK 和插件组件来完成所有这些 Android SDK 和插件配置,这允许所有这些配置工作由 Google 的人员提前完成,而不是由在家的开发人员完成。

安装 Android Studio: IntelliJ IDEA 和 Android SDK

下载完成后,您需要做的第一件事是找到您刚刚下载的文件。它应该在你的操作系统的下载文件夹中,或者在我的情况下,我为这个下载指定了我的软件文件夹,所以我导航到那个文件夹找到然后启动它。

如果您不知道浏览器在下载文件后将其放在了哪里,您也可以右键单击位于浏览器下载进度窗口中的下载文件,并选择文件夹中的视图选项。如果右键单击不起作用,文件名旁边应该有一个向下箭头,它会显示一个下拉菜单项列表。

下载进度选项卡通常位于每个浏览器的底部状态栏区域,或者可以通过下载菜单选项或浏览器右上角的图标来访问(通常是三个黑色条形,表示可以通过该图标访问菜单列表)。

在我的情况下,这个文件被称为android-studio-bundle-135.1641136.exe(我告诉过你它是一个软件包),我将在我的 64 位 Windows 8.1 工作站上使用它。一旦找到 EXE 文件,右击并从上下文菜单中选择以管理员身份运行选项。这将启动一个 Android Studio 设置对话框,如图 2-6 左侧所示。

9781430265504_Fig02-06.jpg

图 2-6 。启动 Android Studio 安装程序(左),选择默认组件(中),同意许可(右)

一旦你有了欢迎来到 Android Studio 设置对话框,点击下一步按钮,这将带你到选择组件对话框,如图 2-6 中间的所示。接受默认组件安装选择,然后单击下一步按钮。这将把你带到一个许可协议对话框,如图 2-6 右侧的所示。点击我同意按钮,将进入配置设置对话框,如图 2-7 左侧所示。接受 Android Studio 和 Android SDK 的默认安装位置,然后单击下一个按钮继续。

9781430265504_Fig02-07.jpg

图 2-7 。接受默认区域设置(左),接受 Android Studio 名称,点击安装(中),安装对话框(右)

选择开始菜单文件夹对话框中,如图 2-7 中间所示,确保文件夹名为 Android Studio ,然后点击安装按钮开始安装过程。然后你会看到一个安装对话框,如图 2-7 右侧所示,它会显示哪些组件被提取并安装在你的工作站上。如果您想查看进度条之外的更多细节,请单击该对话框中的显示细节按钮。

一旦提取和安装过程完成,你会看到完成 Android Studio 设置对话框,显示在图 2-8 的左侧。保持选择启动 Android Studio 选项。接下来,单击完成按钮,这将启动 Android Studio,这样您就可以确保安装创建了一个可用的 IDE。在图 2-8 的中间和右边部分显示了启动屏幕和设置向导。你可以看到 Android SDK 已经安装并且是最新的,所以你完成了!

9781430265504_Fig02-08.jpg

图 2-8 。选择启动 Android Studio 复选框(左),启动屏幕(中),确认安装组件(右)

点击完成按钮,然后启动 Android Studio,如图 2-9 左侧所示。在对话框的左下方,你会看到一个检查立即更新链接,你应该点击这个以确保你的 Android Studio 想法是完全最新的,它应该是最新的,因为你刚刚下载并安装了它!正如你在图 2-9 的右上方看到的,我点击了链接,得到了一个检查更新进度条,然后是更新信息对话框,在图 2-9 的右下方看到,告诉我我有最新版本的 Android Studio。

9781430265504_Fig02-09.jpg

图 2-9 。检查更新(左下角突出显示)、进度条(右上角)、更新信息对话框(右下角)

在本章的剩余部分,您将下载并安装您需要的其他工具。

专业数字影像软件:GIMP 2.8.14

GIMP 是一个类似于 Photoshop 的数字图像软件包,目前的版本是 2.8.14。3.0 版本预计将于 2015 年推出。

GIMP 有许多重要的工具来创建您的 Pro Android 可穿戴应用所需的数字图像素材,包括数字图像处理、遮罩、alpha 通道透明、自动路径创建、矢量(SVG)路径处理、图层合成等等。

要访问 GIMP 网站,您可以在 Google 搜索框中输入 GIMP,也可以输入该网站的 URL,直接进入 GIMP 主页。非营利组织的网址(。ORG) GIMP 2.8.14 网站采用以下格式:

www.gimp.org/

当 GIMP 2 主页出现时,如图 2-10 中的所示,你会在页面的中上方看到一个橙色的下载按钮,在网站主页的右上方还有一个橙色的下载链接。您将点击其中任何一个来访问 GIMP 2.8.14 www.gimp.org/downloads页面。

9781430265504_Fig02-10.jpg

图 2-10 。转到gimp.org站点,点击橙色的下载按钮来获得 GIMP 的最新版本

可以下载专门为 Windows Vista、XP、7、8.1、Linux(通用)、Mac OS/X、BSD、Solaris、Debian、Mandriva、Fedora、Open SUSE、Ubuntu 编译的版本。GIMP 支持这些操作系统的 32 位和 64 位版本。只需点击操作系统的下载链接,将软件下载到您的 Pro Android 可穿戴应用开发工作站。

直到最近,GIMP 2 还是托管在 SourceForge 上,但是该公司决定自己托管在 HTTP 和 Torrent 服务器上,因为一些关于广告客户选择加入的活动,GIMP 的创建者并不支持。我使用标准的 HTTP 链接启动了 64 位 Windows 8.1 GIMP 2.8.14 下载,效果非常好。接下来,我们来看看 Lightworks 12 数字视频编辑和特效开源软件包。

下载完成后,启动安装程序 EXE,,它应该被命名为gimp-2.8.14-setup-1.exe,除非有更高版本可用(2.10 版本预计将于 2015 年在 Q1 发布,3.0 版本将于 2015 年晚些时候发布)。你可以右键点击一个安装程序,然后以管理员身份运行来启动它。

专业数字视频编辑:Lightworks 12

EditShare Lightworks 曾经是一款(昂贵的)付费数字视频编辑和特效软件,时至今日,它与领先的数字视频编辑包(FinalCut Pro X 和 After Effects)展开了正面竞争。

您可以在 EditShare 网站上的www.editshare.com或 Lightworks 网站上的www.lwks.com找到关于这款领先的数字视频编辑 FX 软件包的更多信息,您也可以在那里注册获得该软件的副本,一旦完成,您就可以下载该软件供自己免费使用。

当 EditShare 将 Lightworks 开源后,它成为了第三个免费开源软件(第一个是 GIMP,第二个是 Blender3D ),能够在其新媒体制作类型(数字视频编辑、合成、特效应用和压缩)中与付费软件包进行功能竞争。事实上,EditShare 因其处理速度和创新的用户界面方法赢得了 NAB“最佳展示”奖。

Lightworks 是第一批重写代码以在 GPU(图形卡,如 nVidia GeForce 或 AMD ATI 镭龙)上运行的软件包之一。GPU 处理效果和编码的速度比 CPU 快一个数量级,包括 GIMP 在内的许多其他软件包现在也在代码中实现基于 GPU 的处理。

一旦您在此 Lightworks 网站上注册,您将能够为您的公司创建一个视频编辑器配置文件,并登录以便能够为您在本章中组装的内容开发工作站下载一份 Lightworks 12.1。因为 EditShare Lightworks 是一款非常有价值的软件,你需要注册才能获得它,我并不反对,因为这款软件以前的价格高达四位数。

一旦你注册成为一名骄傲的 Lightworks 12 用户,你可以点击位于网站菜单右上角的下载按钮,你会看到三个不同操作系统版本的标签——Mac、Linux 和 Windows——以及该软件的工具和文档标签。

单击与您的操作系统的位级别相匹配的红色下载按钮,或者如果您想要正在开发的最新测试版本,请单击蓝色下载按钮。下载后,使用默认设置安装它,为它创建一个快速启动图标,并启动它以确保它与您的工作站正常工作,就像您对其他软件所做的那样。

在图 2-11 中可以看到 2014 年第四季度发布的 EditShare Lightworks 版本 12 的下载页面。单击代表您的操作系统的选项卡,然后下载 75MB 软件安装程序。我下载了适用于 Windows 8.1 的 Lightworks 64 位版本 12.0.2。

9781430265504_Fig02-11.jpg

图 2-11 。转到lwks.com网站,注册并点击与您的系统匹配的操作系统选项卡和下载按钮

现在你已经有了 2D 图像和视频编辑软件包,你可能也应该有 3D 和数字音频编辑软件包了!

专业 3D 建模和动画:Blender

接下来让我们来看看世界上最流行的开源软件包之一, Blender 3D 建模 、渲染和动画 软件包,它可以在 Blender 网站的以下 URL 找到:

www.blender.org/

Blender 有一个非常活跃的开发社区,并且每个月都有更新,有时甚至会更频繁。我可以想象,在你读到这本书的时候,会有一个更高版本的软件,但是,这一节中的所有内容仍然适用。也有用 Blender 制作的 3D 电影,以防万一你想掌握这个软件,然后成为一个主要的电影制作人!

在图 2-12 中可以看到,Blender.org主页上还有一个下载 Blender 2.72b 蓝色按钮,同样会带你进入 Blender 下载页面,在这里你可以选择 32 位或 64 位版本的 Blender for Windows。Blender 也适用于 Linux、Mac、Unix 和 Solaris。

9781430265504_Fig02-12.jpg

图 2-12 。转到blender.org网站,点击云图标上的蓝色下载按钮

这个站点将自动检测您当前运行的操作系统版本,由于我运行的是 Windows 8,您将在图 2-13 中看到,Blender for Windows 选项卡被选中,显示一个蓝色的主要软件下载区域。

9781430265504_Fig02-13.jpg

图 2-13 。第blender.org/download/页;选择顶部的操作系统选项卡,然后单击您的操作系统类型的安装程序链接

正如你所看到的,世界上有许多不同的下载服务器托管这个非常受欢迎的软件包,所以如果你在荷兰或德国,你可以点击这些链接更快地下载软件(或者至少离你更近)。

因为我有运行 Windows XP (32 位)、Windows Vista (32 位)、Windows 7 (64 位)和最近的 Windows 8.1 (64 位)的新媒体内容制作工作站,所以我已经下载了这两个版本的 Blender,如果你回头看一下图 2-13 中显示的截图,就可以看到这一点。单击与您的操作系统配置(32 位或 64 位)匹配的版本(操作系统位级),然后下载 Blender 的相应版本。

一旦你的下载完成,启动安装程序 EXE,它应该被命名为blender-2.72-windows32.exeblender-2.72-windows64.exe,除非更新的版本已经可用(版本 2.8 预计在 2015 年推出)。安装完成后,右键单击图标或可执行文件,选择固定到任务栏选项,创建一个快速启动图标。

专业数字音频编辑:Audacity 2.0.6

Audacity 项目 托管在sourceforge.net上,这是一个开源软件开发网站,如果你还不知道这个网站,你可能会发现搜索你感兴趣的软件非常有趣!要访问 Audacity 项目,进入audacity.sourceforge.net网址,你会看到一个下载 Audacity 2.0.6 链接, 如图图 2-14 所示。

9781430265504_Fig02-14.jpg

图 2-14 。转到 SourceForge 网站上的audacity.sourceforge.net页面,点击下载 Audacity

请注意,32 位 Audacity 支持几十年前的操作系统,如已有十多年历史的 Windows 2000 和现在已有近十年历史的 Windows XP。我希望你的 Android 可穿戴设备开发工作站使用的是 Windows 7 或 Windows 8.1 操作系统,因为 Windows 8.1 的内存效率现在几乎和 Linux 一样高了!

一旦下载了 Audacity 安装程序文件,您就可以启动它并继续安装这个功能丰富的数字音频编辑软件。它问你的第一件事是你想用什么语言运行这个软件,我选择了默认语言,英语。然后我点击了一个下一个按钮,读取信息。然后,我再次单击 Next 按钮,接受默认的安装位置,并创建了桌面图标。最后,我点击了安装按钮,得到了安装进度条对话框,以及关于 Audacity 项目的更多信息,还有最后一个对话框,在那里我可以点击完成按钮来退出安装软件。

如果你愿意,你可以按照我用 Blender 做的相同的工作过程,通过右键单击 Audacity 2.0 图标并选择固定到任务栏,在任务栏上放置一个快速启动快捷图标。您可以通过将启动图标拖动到任务栏上您喜欢的任何位置来重新定位它们。

现在 Audacity 已经安装好了,您可以启动音频编辑软件并确保它在您的系统上工作。通过快速启动图标或双击桌面上的图标来启动 Audacity。你应该看到一个新的空白项目,如图 2-15 所示,在桌面上打开。在本书的后面,你将使用 Audacity 为你的 Android UI 元素对象添加音效, ,比如你的按钮和 ImageButton 对象。

9781430265504_Fig02-15.jpg

图 2-15 。启动 Audacity,确保它能在您的可穿戴设备开发工作站上正常运行

接下来让我们下载领先的开源用户界面设计原型软件包 Pencil 2.0.5。这适用于 Windows、Linux 和 Macintosh,并以所谓的“模板”包的形式支持 Android 和 HTML5 用户界面,这些包适用于 Android 4、iOS、Dojo JS、Ext JS Neptune,将来可能还会支持 Android 5。如果你喜欢绘制 UI 设计,你会喜欢铅笔!

专业 UI 设计线框化:铅笔项目 2.0.5

接下来,您将下载并安装一个名为 Pencil 的用户界面(UI) 线框化原型化工具,目前版本为 2.0.5。在谷歌上搜索 Pencil 或直接进入以下网址,可以在图 2-16 的顶部看到:

http://pencil.evolus.vn

9781430265504_Fig02-16.jpg

图 2-16 。进入pencil.evolus.vn网站,点击橙色下载按钮下载 Pencil 2.0.5

当 Pencil 项目主页出现时,点击橙色的下载按钮,下载 22MB 软件安装程序可执行文件。这应该被命名为类似于 Pencil-2.0.5.win32.installer.exe 的**。Pencil 只使用 32 位二进制,因为软件不需要 64 位提供的功能。**

一旦下载完成,启动安装程序,当它完成时,右键单击你的桌面图标或开始菜单图标(甚至在一个可执行文件上)并选择固定到任务栏选项来创建软件的快速启动图标快捷方式。我的 Windows 8.1 任务栏如图图 2-17;注意我已经添加了字体**、计算器文本文件管理工具。

9781430265504_Fig02-17.jpg

图 2-17 。显示快速启动任务栏,带有关键的操作系统工具、新媒体软件和 Android Studio

现在,为了彻底起见,让我们安装一个完整的商业生产软件套件,以防您需要为未来的 Android 可穿戴设备软件开发项目整理报价、电子表格甚至合同!

专业商业软件套件:OpenOffice 4

为了 100%确保您的 Android 开发工作站已经安装了您的专业 Android 可穿戴设备应用开发业务所需的一切,让我们以另一个名为 OpenOffice 4 的软件包来结束这一令人印象深刻的专业软件安装,该软件包最初来自 Java 的制造商 Sun Microsystems,被 Oracle 收购,并在开源后移交给 Apache。

在谷歌上搜索 Apache Open Office,或者访问www.openoffice.org网站,然后单击我想下载 OpenOffice 4 链接,或者访问 Open Office 4.1.1 下载页面,该页面位于以下 URL,如果您想直接在浏览器中键入该 URL:

[`www.openoffice.org/download/index.html`](https://www.openoffice.org/download/index.html)

正如你在图 2-18 中看到的,网站可以检测到你正在使用的操作系统和位级别,以及你正在使用的语言!

9781430265504_Fig02-18.jpg

图 2-18 。Apache OpenOffice 4.1.1 下载页面,已经自动检测到我的 64 位 Windows 8.1 操作系统

一旦你进入/download/页面,如图 2-18 所示,点击绿色箭头为你的操作系统下载最新版本的 office 套件,在我的例子中是 Windows 8.1(该网站为我自动检测)。这个下载差不多有 135MB,包含了六个以上的生产力软件包,包括一个文字处理器、一个电子表格和一个数据库。

下载完成后,启动你的 installer EXE,完成后右击图标或可执行文件,选择 Pin to Taskbar 选项,为软件创建快速启动图标快捷方式。

接下来,我将告诉你一些其他的开源和负担得起的 3D 软件包,我用它们来为我的客户创造新的媒体内容。

其他开源和负担得起的媒体软件

还有很多其他的开源软件包,如果你想要的话都有,包括 SketchUp (建筑渲染) TerraGen3 (虚拟世界创作)true space(3D)Wings3D、 Bishop 3D、 POV Ray 3.7 (3D 渲染) Rosegarden (音乐作曲、MIDI 和配乐) Qtractor (声音

还有一些非常实惠的 3D 软件包你也应该看看,包括 NeverCenter SILO 2.3(四边形 3D 建模)Moment of Inspiration3(NURBs 3D 建模) Vue 3D (3D 世界生成) Hexagon 2.5(多边形 3D 建模)【Auto-Des-Sys Bonzai (3D 建模)以及 NewTek Lightwave 3D (3D 建模、3D 动画

我在每个新媒体内容制作工作站上安装了这些专业开源软件包。这允许你为你所有的制作人创建完全加载的 3D 制作工作站,唯一的成本是硬件,你可以在沃尔玛花 300 到 600 美元买到。

恭喜你!您现在已经组装了专业级的 Android 可穿戴应用和新媒体内容开发工作站,您现在可以利用它来创建专业的 Android 可穿戴应用,并在世界未发现之前开发用户界面设计和用户体验!

接下来,让我们快速概述一下您将在本书的课程中学习的一些内容,现在您已经了解了可穿戴设备、Android 5 材质设计,并设置了您将用于开发可穿戴应用的 Pro Android 可穿戴设备开发工作站。

摘要

在这一章中,您完全设置了您的全面的 Pro Android 可穿戴设备 Android Studio 应用开发工作站,学习了硬件要求(以及您真正应该拥有的东西)以及关于开源软件的所有内容,在过去的十年或二十年中,开源软件最终变得像付费软件包一样专业,这些软件包可能很容易就要花费数千美元!

您下载并安装了 Java SE 7、Android Studio、新媒体内容制作软件、(可选)用户界面设计原型、商业生产力工具,您下载并安装了世界上最令人印象深刻的开源软件包。

你这样做是为了给你的 Pro Android 可穿戴设备和设备应用开发工作流程打下基础,你将在本书中进行这项工作。我决定让你先安装所有的软件,而不是在你进行的时候安装这些软件包。我这样做是为了防止你想在实际阅读本书之前探索这些强大、令人兴奋的新媒体内容制作软件包的许多功能。我认为这很公平。

这个过程最棒的一点是,你是通过使用开源、100%免费的商业用途和专业级应用软件包来完成的,如果你仔细想想,这是非常惊人的。

你从下载安装甲骨文 Java SE 7u72 JDK 或者 Java 开发包开始,这是 Java 7 编程语言的 SDK。这个 Java JDK 是使用 Eclipse 以及为消费电子设备的 Android 操作系统平台开发应用软件所必需的。

然后你访问了 Android Developer 网站,下载并安装了 Android Studio Bundle ,它在你的 Java SE 7 编程软件开发环境之上构建了 IntelliJ IDEA 以及所有的 Android Developer Tool 插件。

接下来,您下载并安装了 GIMP 2.8.14 ,这是一个强大的数字图像编辑包,可用于 Windows、Linux 和 Macintosh 操作系统。

然后你下载并安装了 Lightworks 12 ,这是一个数字视频编辑和特效包,最近作为开源发布,目前可用于所有流行的操作系统。

然后,您下载并安装了 Blender 2.72 ,这是一款适用于 Windows、Linux 和 Mac OSs 的专业 3D 建模、渲染和动画工具。

接下来,您下载并安装了 Audacity 2.0.6 ,这是一个可用于 Windows、Linux 和 Mac OSs 的开源数字音频编辑工具。

然后您下载并安装了 Pencil 2.0.5 ,这是一个流行的 UI 线框和原型工具,可用于 Windows、Linux 和 Mac OSs。

最后,您安装了 Apache Open Office 4.1.1 ,只是为了确保您拥有一个完全完善的开源工作站。

在下一章中,您将了解 Android 5 的所有新功能,从而为 Android 5 操作系统为您的定制可穿戴设备应用开发提供的功能打下坚实的基础。**

三、Android 可穿戴设备的基础:Android 5 中新的可穿戴功能

现在,您已经组装了一个 Android 开发工作站,上面安装了那些有价值的(但免费的)、专业级的开源软件包,是时候看看 Android 5 为可穿戴开发添加的所有新东西了。我在第一章中彻底讨论了材质设计的增加以及可穿戴的类型和概念,因此本章将涵盖更多技术和“幕后”的增加,如新媒体硬件和编解码器支持,新技术,如最新的蓝牙OpenGLWebKitWebAudioWebRTC 平台,以及其他您希望了解和了解的东西,以便您的 Android

当然,我会在本书中尽可能多地利用 Android 5 的这些功能,为你的可穿戴设备应用添加更多功能。也就是说,我在这里只有几百页来完成这一点,而 Android OS 有数千个类、方法和常数,所以我将专注于 Android 5 的功能,以及这些功能如何应用于可穿戴设备应用。我这样做主要是因为这是一本关于专业 Android 可穿戴设备的书,因此,我假设你已经熟悉 Android 4 以及之前的 Android 操作系统版本。本章将介绍 Android 5 电源管理、网络连接、视频、音频和 3D 新媒体、网络媒体渲染、超高清摄像头支持、数据存储、锁屏通知和通知元数据、屏幕共享、屏幕捕捉和 Android 扩展包。

Android 的项目 Volta:电源管理工具

目前,可穿戴设备应用最关键的领域之一是电源管理领域。许多智能手表型号仍在纠结于电池寿命的问题。智能手表制造商正试图让产品在不充电的情况下持续使用数周或数月;然而,更好的电池技术,或者一个简单的智能手表支架,当智能手表在晚上用户睡觉时给电池充电,最终可能会产生更好的解决方案。无论如何,Android 5 解决了其项目 Volta 中的电源问题,该项目专注于通过使用任务调度器(电源管理)和任务最小化(电源优化)API 来使 Android 更加节能。

Android 5 进程调度器:JobScheduler 和 JobInfo

Android 5 增加了一个新的 android.app.job 包,其中包含 JobScheduler ,这是一个类(对象),可以让你通过为 Android 操作系统定义作业(任务处理)来异步运行,从而优化可穿戴设备的电池寿命。异步处理允许任务在“不同步”(无序)的情况下处理,可能会在稍后进行,这样操作系统就可以在较低的级别优化内存和 CPU 的使用。因为作为可穿戴应用开发人员,您不知道用户将运行哪些应用,以及以什么顺序运行,所以作为可穿戴应用开发人员,您将无法实现这种级别的优化,而这个 job API 允许 Android 为您实现这一点。

这些作业(任务)也可以被安排在更优化的条件下进行处理,例如当 Android 设备正在充电并且可以获得无限的电力时,或者在可穿戴应用开发者可以指定的其他类型的条件下,例如当视频正在流动时。

这个 JobScheduler 类 用于保证 Android 可穿戴设备在可穿戴设备开发场景中的电源优化,在这些场景中,可穿戴应用具有可以推迟的非面向用户的任务(后台处理),或者应用具有开发人员希望在可穿戴设备(和主机)插入电源(充电)时处理的任务。

开发人员还可以根据外部资源的可用性安排任务处理,例如,电信(4G LTE)网络接入、蓝牙主机设备或本地 Wi-Fi 连接的可用性。

您还可以使用这个 JobScheduler 类进行批处理。这允许开发人员将调度的任务组合在一起,以便它们可以“批处理”运行批处理在大型机和小型机时代就开始流行了,现在被称为企业计算和服务器!

批处理是计算机同时处理所有任务的地方。这通常是定期完成的,例如每小时、每天、每周或每月。在大型机计算的早期,批处理被安排在晚上,此时 IT 部门正在休息,所有的计算机能力都可以集中在处理上。请注意,您也可以一次调度一个基于时间的任务,因此 JobScheduler 类也可以用于执行例行或基于时间的任务处理。

JobScheduler 对象在 JobService 对象(类)内部运行,该对象是 Android 服务的子类,管理所有需要调度的作业。由 JobScheduler 对象处理的每个“工作单元”是使用一个 JobInfo (类)对象定义的。Android OS 也会生成一个 JobParameters 对象。这包含作业标识、配置和参数。这些是由 Android 操作系统基于所有计划的作业生成的。

JobInfo 对象用于指定开发者希望 Android 操作系统如何处理调度标准。该对象是使用 JobInfo 创建的。Builder 类,它允许开发人员使用 Java Builder 语法并轻松配置调度任务应该如何运行。

您可以安排 JobInfo 任务对象在精确(严格)或特定的条件下运行。这些包括当设备正在充电时开始任务或仅当设备正在充电时处理该任务,当设备连接到未计量的网络时运行或开始任务,每当设备空闲(未被主动使用)时开始任务处理,或在某个截止日期出现之前或在任务处理开始之前具有最小延迟的情况下处理任务。

例如,以下构建器 Java 代码结构将按此顺序创建一个 JobInfo 对象,该对象将在设备重新启动后持续存在,要求设备处于充电状态,定期运行任务,将任务的运行延迟一定的延迟因子,并要求设备连接到未计量的网络(如家庭 Wi-Fi 或 DSL[数字用户线]服务)。

JobInfo uploadTask = new JobInfo.Builder( mJobId, mJobServiceComponent )
                                .[setPersisted](https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setPersisted(boolean))( true )
                                .[setRequiresCharging](https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setRequiresCharging(boolean))( true )
                                .[setPeriodic](https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setPeriodic(long))( intervalUsingLongDataValueInMilliseconds )
                                .setMinimumLatency( minimumLatencyUseLongDataValueMilliseconds )
                                .setRequiredNetworkCapabilities( JobInfo.NetworkType.UNMETERED )
                                .build();

JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

值得注意的是,如果设备具有“稳定”的电源(即,它已经插上电源(超过两分钟)并且电池寿命处于健康水平),如果 JobInfo 对象的任务处理截止日期尚未到期,系统将运行任何准备运行的计划作业。

Android 5 电池优化器:电池历史工具

还有一个新的ADB shell dumpsys battery stats命令,可以生成关于安卓设备上电池使用情况的统计数据。这些数据使用一个唯一用户 ID (UID) 进行组织。每当调用该命令时将收集的统计数据包括该 Android 硬件设备的电池相关事件和全局电源相关统计数据的历史记录、每个 UID 和系统组件的电源使用的近似值、每个数据包的每个应用移动毫秒数、UID 系统汇总统计数据和 UID 应用汇总统计数据。

如果您想了解更多关于定制工具输出的各种命令行选项的信息,您可能想使用一个名为 - help 的开关(命令行工具使用开关或选项,以一对减号或破折号开头)。我会使用以下命令行格式:

$ adb shell dumpsys batterystats --help

例如,如果您想要打印自 Android 设备上次充电以来给定应用包的电池使用统计数据,您可以运行以下命令行格式来实现:

$ adb shell dumpsys batterystats --charged <your-package-name-here>

您可以在 dumpsys batterystats 命令的输出上使用 Google Battery Historian 工具。这将为命令日志中与电源相关的事件生成一个基于 HTML5 的可视化视图。这些信息让您更容易理解和诊断与电池相关的可穿戴设备的应用编程问题。如果你愿意,你可以在 GitHub 上下载一份谷歌的电池历史记录工具,网址如下:

[`github.com/google/battery-historian`](https://github.com/google/battery-historian)

接下来,我将解释 Android 5 可以连接的不同类型的网络。这对于可穿戴应用显然非常重要。

安卓的网络连接 : NFC 和蓝牙

目前 Android 可穿戴硬件设备的另一个关键支持领域是多数据网络支持的领域。支持更多电信网络的可穿戴设备将更好地与世界连接,因此具有更多有用的可穿戴应用。当您的可穿戴 Android 设备可以找到并接入各种不同的数据网络,如 4G LTE、Wi-Fi、蓝牙和 NFC(近场通信)时,您的可穿戴应用对企业和消费者都变得更有价值。

Android 5 多重网络支持:ConnectivityManager

Android 5 提供了一个全新的多网络 API ,它将允许你的可穿戴应用动态扫描具有特定功能的可用网络。一旦 API 找到一个网络,您将能够建立到它的连接,为您的可穿戴应用的功能提供数据。

当可穿戴应用需要专用网络时,Androidconnectivity manager类提供的功能会非常有用。Android 当前支持的网络可以在 ConnectivityManager 类的常量列表中找到,其中包括 TYPE_BLUETOOTH (蓝牙数据连接) TYPE_DUMMY (虚拟连接) TYPE_ETHERNET (以太网连接) TYPE_MOBILE (移动连接) TYPE_MOBILE_DUN (DUN 移动连接) TYPE_MOBILE_HIPRI (高优先级移动连接) TYPE_MOBILE 如果您想使用特定类型的传输协议传输数据,这个类也很有用。

要从应用中动态选择并连接到数据网络,首先需要创建 ConnectivityManager 对象。接下来,您将使用一个名为 NetworkRequest 的构建器类。构建器 创建网络请求对象,然后指定可穿戴应用感兴趣连接(网络类型)和利用(协议)的网络功能和传输类型。

要扫描各种支持的数据网络,可以使用**。requestNetwork( )** 然后可以将 NetworkRequest 对象和一个 ConnectivityManager 一起传递给方法调用。NetworkCallback 对象。这应该通过以下方式完成。requestNetwork()方法对 Java 编程结构的调用:

.requestNetwork( NetworkRequest, ConnectivityManager.NetworkCallback )

您还可以设置 Android,通过使用**来通知您的应用检测到网络可用性。****registerNetworkCallback()**方法调用在 Java 代码中为进入范围的网络设置一个监听器。这应该使用。使用以下 Java 编程结构进行 registerNetworkCallback()方法调用:

.registerNetworkCallback( NetworkRequest, ConnectivityManager.NetworkCallback )

一旦检测到合适的网络,如果想要主动切换到合适的网络,可以使用 requestNetwork()方法。如果您希望只接收被扫描网络的通知,而不主动切换到它们,那么您可能希望使用. registerNetworkCallback()方法调用。

当 Android 操作系统检测到合适的网络时,它将连接到该网络并调用一个**。** onAvailable( ) 回调方法调用。

如果您想确定有关可用网络的其他信息,可以轮询从 NetworkCallback 对象返回的网络对象。完成此操作后,您可以指示您的应用使用这些选定的网络之一来执行数据传输操作。

Android 5 低能耗蓝牙:蓝牙 LE API

你大概还记得 2014 年 Android 4.3 推出了对蓝牙低能耗 (一个蓝牙 LE API)的平台支持,支持 Wear SDK。在 Android 5 中,用户的 Android 硬件设备也可以充当蓝牙 LE 外围设备,允许它与其他蓝牙设备进行“社交”。本质上,这将 Android 硬件变成了蓝牙集线器!

Android 5 可穿戴设备应用可以利用这一功能,让附近任何支持蓝牙的消费电子设备知道自己的存在。使用这一新功能,您可以构建可穿戴应用,允许设备充当计步器或心脏监视器,如果可穿戴硬件支持这些功能,然后将产生的医疗保健数据与附近的另一个蓝牙 le 设备进行通信。

这个新的蓝牙 LE API 包含在一个名为 android.bluetooth.le 的 Android 包中,你可能已经猜到了。这种新的 API 使您的可穿戴设备应用能够做一些事情,如广播广告,扫描响应,以及与其他蓝牙设备建立连接。

如果您想要使用这些新的广告或扫描功能,您需要将 BLUETOOTH_ADMIN 权限添加到 AndroidManifest.xml 文件中。当您的最终用户从谷歌 Play 商店下载(或更新)您的可穿戴应用时,他们将被要求授予这种“蓝牙连接信息 : 允许应用控制蓝牙,包括向附近的蓝牙设备广播或获取有关这些设备的信息”权限,以用于您的可穿戴应用。这在应用用于连接(双向)其他蓝牙设备之前获得了用户的许可。

要开始蓝牙 LE 广告,以便任何支持蓝牙的设备都能够检测到可穿戴应用,请调用**。** startAdvertising( ) 方法然后传递它一个 Android 广告回调类的实现。

这个广告回调对象将接收关于蓝牙 LE 广告操作成功或失败的报告。Android 5 还增加了一个 ScanFilter 类,这样可穿戴设备就可以只扫描它们感兴趣的特定类型的设备。要开始蓝牙 LE 设备扫描,您需要调用一个**。** startScan( ) 方法,传入你的 ScanFilter 对象列表。您还必须提供对您的 ScanCallback 对象的引用。每当检测到任何指定的蓝牙(设备)广告时,ScanCallback 对象将向可穿戴应用报告。

Android 5 NFC 改进:近场通信

Android 5 还对他们的 NFC 技术实现进行了增强。这些新增功能将使这一强大的 NFC 技术得到更广泛、更灵活的应用。

Android Beam 技术被添加到 Android 4 中,但从未真正应用过可靠的用户体验设计,因为相对于两个不同的 Android 用户来说,该技术很难启动,该技术已被添加到 Android 5 操作系统的 Android 共享图标区域。

只要你想让用户分享数据,你的可穿戴应用就可以在用户的 Android 硬件上调用这个 Android Beam 应用。这将通过调用**来完成。****【invoke beam()**方法。

使用这种方法调用进行设置,避免了用户为了完成数据传输而手动点击其他支持 NFC 的设备,从用户体验的角度来看,这种技术更容易使用。

要通过 NFC 连接传输数据,您需要创建并利用一个 NDEF (NFC 数据交换格式)记录,它使用轻量级二进制格式。这种 NDEF 格式由 NFC 论坛指定,可用于封装类型化数据,以便使用 NFC 连接进行传输和存储。有趣的是,NDEF 是交通不可知论者。

该 NDEF 用于定义消息和数据记录。您的 NDEF 记录将包含类型化数据,比如 URL 或 URI(统一资源标识符)、MIME 类型的媒体、文本消息或自定义应用数据传输“有效负载”一个 NDEF 消息是一个或多个 NDEF 记录结构的容器。这可能需要一点时间来适应,因为通常情况下,数据记录会包含一条消息,而不是相反。我会称之为 NDEF 包,但只要你知道 NDEF 消息是 NDEF 记录的集合,那么如果你想开发使用 NFC 的应用,你就可以开始了!

例如,如果您想创建一个 NFC 消息应用,您可以使用新的**。** createTextRecord( ) 方法创建一个包含 UTF-8 文本数据的 NDEF 记录。这个 Android NdefRecord 类也有一个**。createUri( )** 和一个**。createMime( )** 方法分别用于创建 URI 和 Mime 数据记录类型。

如果你正在开发一个信用支付应用,你现在有能力动态注册你的 NFC 应用 ID ( AID ) 。这可以通过调用一个registeridsforservice()方法来完成。您还可以使用 setPreferredService( ) 方法调用来设置首选的卡仿真服务。当特定的活动在前台(由最终用户使用)时,总是会调用此方法。接下来,我们来看看安卓媒体!

Android 5 媒体:给可穿戴设备增加惊喜因素

除非你的可穿戴应用都是纯功能性的,否则你的可穿戴应用在市场上的成功将取决于你如何实现媒体元素以达到令人惊叹的水平。这将允许你让买家选择你的应用,而不是其他(竞争)可穿戴应用。本节将介绍所有新媒体素材,如数字视频、数字音频和 3D,以及其他领域,如 web 浏览器支持(WebKit)、WebAudio、WebGL、WebRTC、MediaBrowser 和新的超高清(UHD)Camera 2 API。

数字视频播放:媒体控制器和媒体会话

Android 5 增加了一个全新的媒体控制包,名为 android.media.session 。这个包包含了全新的 MediaControllerMediaSession 类,以及这两个类的嵌套类,还有 MediaSessionManagerPlaybackState 类,它们也有嵌套类。

使用新的通知和媒体 API 来确保系统 UI 了解您的媒体播放,并可以提取和显示专辑封面。由于 MediaSession、PlaybackState 和 MediaController 类以及它们的九个工具嵌套类,使用带有 MediaSessionManager 服务的 UI 设计来控制媒体播放现在是一种无缝的开发人员体验。

您将使用一个Context . getsystemservice(Context。MEDIA_SESSION_SERVICE) 调用以获取 MediaSessionManager 对象(类)的实例,并调用。getSystemService(上下文。MEDIA_SESSION_SERVICE)方法从您的上下文对象中删除。这方便地为 MediaSessionManager 服务类提供了显示可穿戴应用正在做什么的上下文(对象)。

MediaSession 类取代了现在已经废弃的 RemoteControlClient 类,并提供了一组统一的回调方法。它们处理走带控制和媒体按钮。如果您的可穿戴应用提供媒体播放,您将需要使用 MediaSession 类(对象)来处理使用这些回调方法的传输控制。值得注意的是,以这种方式编码的应用可以在 Android TV 和 Android Wear SDK 上运行。

您甚至可以使用 MediaController 类创建自己的 MediaController 可穿戴应用。这个类提供了一种“线程安全”的方法,这样你就可以从可穿戴应用的 UI 进程(主 UI 线程)内部监视和控制你的媒体素材回放。要创建媒体控制器,需要指定一个 MediaSession。令牌对象。完成后,您的应用可以与 MediaSession 对象进行交互。你将呼叫**。。停()。skipToNext( )** ,或者**。setRating( )** 方法来控制媒体素材的回放。

这是通过使用媒体控制器来完成的。TransportControls 对象(嵌套类),正如您可能从类名中注意到的,它提供了一个 UI 传输控制对象来与 MediaController 对象一起使用,media controller 对象是 MediaSession 对象的一部分。

另一个 MediaController 嵌套类, MediaController。回调,将允许你注册一个媒体控制器。回调对象。这将监听素材的元数据,并将媒体会话的任何状态变化实时报告给可穿戴应用,以便您的代码能够对其做出响应。

您可以创建多媒体通知,这允许您使用新的通知将回放控制绑定到媒体会话。MediaStyle 类。这个类是 android.app 包的一部分,是通知的子类。Style 类,它允许您将媒体与多媒体设计混合在一起,例如,显示带有传输 UI 的专辑封面。

数字音频播放:增强的音轨精度

Android 5 AudioTrack 类也在 android.media 包中,它为 Java 应用管理和播放单个音频资源。它允许开发人员将 PCM(脉冲编码调制)音频缓冲直接从系统内存流式传输(动态)或播放(静态)到音频硬件,以获得低延迟的用户体验。

这是通过使用以下三种方法之一将数据加载到系统内存中的 AudioTrack 对象来实现的。write()方法调用参数表结构:

.write( byte[],  int, int )
.write( short[], int, int )
.write( float[], int, int, int )

在流(动态)模式下,可穿戴应用使用以下三者之一将连续的数据流写入 AudioTrack 对象。write()方法。动态流模式在播放由于音频持续时间过长或数字音频素材数据压缩特性(例如,24 位采样分辨率下的高频采样率,如 THX、48Khz 16 位或 24 位数字音频)而导致数据量过大而无法一次放入内存的音频数据块时非常有用。

动态音频流也是灵活的,因为它可以在先前排队(加载到系统存储器中)的数字音频播放时被接收或生成。

当处理易于放入系统内存的短声音时,应使用静态音频模式,该模式需要使用最小的等待时间(延迟)进行回放,以确保同步准确性。

因此,当实现需要经常或快速连续播放几次的 UI 或游戏音频素材时,应该使用静态音频模式,尽可能使用低延迟和最少量的系统存储器。

一旦你创建了一个 AudioTrack 对象,Android 操作系统就会为 AudioTrack 对象初始化一个相关的音频缓冲区。缓冲区的大小是在构造 AudioTrack 对象时指定的。这决定了 AudioTrack 对象在用完数据之前将从内存中播放多长时间。对于使用静态模式的 AudioTrack 对象,缓冲区大小是可以使用 AudioTrack 对象播放的声音的最大大小。

AudioTrack 类提供了三个重载的构造函数方法,它们可以采用以下构造函数方法调用参数列表格式:

AudioTrack( int streamType, int sampleRateInHz, int channelConfig, int audioFormat,
            int bufferSizeInBytes, int mode )
AudioTrack( int streamType, int sampleRateInHz, int channelConfig, int audioFormat,
            int bufferSizeInBytes, int mode, int sessionId )
AudioTrack( AudioAttributes attributes, AudioFormat format, int bufferSizeInBytes,
            int mode, int sessionId )

对于流模式,数据将以小于或等于总缓冲区大小的块写入音频接收器。AudioTrack 不是最终版本,因此允许子类,但不建议这样使用。这个版本包括了 Android AudioTrack 类的一些值得注意的变化。

您的应用现在可以使用高精度浮点格式和新的 Android 常量 ENCODING_PCM_FLOAT 来提供音频数据。这是为了增加 PCM(也称为 WAVE audio)音频数据格式的动态范围。这允许高清晰度(24 位和 32 位)波数字音频(。WAV 文件)具有更一致的精度以及更多的“净空”

这是因为浮点精度对于在数字音频素材使用的计算类型中提供更准确的结果非常有用。回放端点仍然对数字音频素材使用整数数据格式,因此使用较低的位深度。与 Android 5 一样,部分内部数字音频管道尚未完全重新编码,以利用 100%浮点数据表示。

Android 5 中还有一些强大的数字音频处理算法类,保存在 android.media.audiofx 包内。那些熟悉音频工程的人会因为我简单地提到一些类名而激动不已,这些类名揭示了每个进程的作用。这些令人印象深刻的音频处理算法以类的形式实现,包括 BassBoost、EnvironmentalReverb、均衡器、虚拟化器、PresetReverb、可视化器、声音增强器、噪声抑制器,最后是声音取消器和自动增益控制。

正如你所看到的,Android 非常关注数字视频、数字音频、数字插图以及 3D 渲染和动画等专业多媒体类型,我将在接下来进行解释。伙计们,抓紧你们的帽子,我们就要进入第三维度了!

实时 3D 渲染:OpenGL ES 和扩展包

Android 5 增加了大量强大的交互式 3D 功能,也称为 i3D。这些都是为了增加 Android 操作系统的惊喜因素,以便它可以与市场上所有其他 64 位操作系统竞争,如 iOS 8 和即将推出的 Windows 9。

人们常说“扁平化 UI 设计”是流行趋势;然而,Android 5 OS 似乎在抵制这种趋势,它包括了 3D 涟漪效果,dropshadow 的微调控制(阴影高度,Z 层顺序,视图自动阴影),OpenGL ES 3 支持和 OpenGL 4.4 仿真。

这些功能旨在将 Android 5 置于与 Xbox 和 PlayStation 游戏机平等的竞争环境中。这种 i3D 功能的大部分被用于新的 Android 5 材质设计模式,我在第一章中详细讨论了这一点。来学习一下 OpenGL 和 Android 扩展包吧!

open GL ES 3.1:Android 5 的增强 3D 渲染技术

Android 5 中添加的最强大的 3D 功能之一是包含了最新版本的 OpenGL ES 3.1 。你可能已经猜到,这个“ES”代表嵌入式系统。这个版本的 OpenGL 经过优化,可以在浏览器和嵌入式设备上运行,如智能手表和智能眼镜。

OpenGL ES 3.1 是这种实时 i3D 渲染技术的最新版本。OpenGL 常用于流行的 3D 视频游戏中。大多数新功能都与使 3D 对象看起来逼真的“皮肤”有关。在 3D 建模或动画行业中,这些被称为“纹理贴图”。这些纹理贴图由不同的“着色属性”组成,通常称为“着色器”

高级效果,如动画表面或响应游戏播放或位置的表面,可以使用表面材质中每个着色器“槽”中的“着色器语言”来创建。这有点类似于在图像合成中使用层,只是着色器在数学上要复杂得多,因为它们包含许多允许它们实现照片真实感的属性。其中有颜色透明度光泽(闪亮度)、光照(光晕)、反射度(倒影)、以及凹凸贴图(表面高度)。

OpenGL ES 3.1 支持增强纹理映射 功能,包括“多样本”纹理功能,可在纹理映射应用中产生更高的边缘质量。这类似于你将在本书后面学到的反走样。

OpenGL ES 3.1 还支持模板纹理映射、,用于增强纹理贴图的深度错觉。这些可以使用深度缓冲纹理来创建,而不是实际的 3D 几何体(基础网格或 3D 多边形模型)。这些高级功能使 3D 游戏输出质量可与 PlayStation 4 或 Xbox 等传统游戏平台相媲美。

很明显,谷歌正在用 Android 5 追赶他们的 3D 游戏机竞争对手。市场上已经有几款基于安卓系统的游戏机,包括售价 99 美元的 OUYA、亚马逊 Fire TV 和售价 199 美元的 nVidia Shield。这些最有可能在 2015 年升级到 Android 5。

OpenGL ES 3.1 还支持一种叫做“计算着色器”的东西这些实际上根本不是纹理贴图或着色器,而是一种编程构造,允许开发人员使用图形处理单元(GPU)来执行与 3D 无关的计算。使用 GPU 而不是 CPU 进行数学计算更快、更高效,因为 GPU 针对浮点数学进行了优化,而 CPU 更适合(优化)基于整数的数学。

在游戏应用中,计算着色器的流行实现是使用计算着色器将游戏物理计算卸载到 GPU 上。这样做是因为当前的 GPU 技术比 CPU 技术更强大,至少在解决高度复杂的数学计算时是如此,这些计算通常在 i3D 游戏应用中使用。

许多开源软件包,如 GIMP 3 或 EditShare Lightworks 12,利用计算着色器使其软件以闪电般的速度执行复杂的特效和像素过滤应用。

只要用户在他们的 Android 设备中有 nVidia GeForce 或 AMD 镭龙 GPU,可穿戴应用也可以利用计算着色器。有一些 Android 设备采用了 Tegra K1 微处理器(由英伟达制造,目前在英伟达 Shield 和亚马逊 Fire TV 中使用),因此可以利用这种能力,通过使用这些 OpenGL ES 3.1 计算着色器来使用 GPU 进行非 3D 中心的计算。

OpenGL ES 3.1 还向后兼容 OpenGL ES 2 和 OpenGL ES 3,所以请放心,您现有的 3D 可穿戴应用代码都不会被破解。OpenGL ES 3.1 将提供可选的“扩展”,允许第三方制造商(如 nVidia)添加高级混合模式(纹理层合成特效)和微调的阴影效果,如完整的 OpenGL 4.4 规范中的那些。

事实上,我接下来将要讨论的 Android 扩展包(AEP)就是这种第三方扩展特性的一个典型例子。

Android 5 增加了 Java 接口和对 OpenGL ES 3.1 的原生支持。Android 上 OpenGL ES 3.1 的 Java 接口是通过 GLES31 提供的。如果你使用 OpenGL ES 3.1,一定要在 Android Manifest 文件中用 < uses-feature > 标签声明它,还有 android:glEsVersion 属性,像这样:

<manifest>
          ...
          <uses-feature android:glEsVersion="0x00030001" />
</manifest>

接下来,我们来看看如何将 Android 5 升级到 OpenGL 4.4!

Android 扩展包:使用 OpenGL ES 模拟 OpenGL 4.4

OpenGL ES 3.1 标准还有一个额外的扩展叫做 AEP ( Android 扩展 Pack ) 。AEP 允许在完整的 OpenGL 4.4 版本中发现的特性。这意味着具有类似于《疯狂足球》、《虚幻 4》和《光环 4》中所见 3D 图形的 3D 主机游戏将能够在 Android 5 和支持 GPU 硬件的更高版本硬件设备上运行,如 nVidia Tegra K1。

AEP 的主要特性包括镶嵌着色器几何着色器自适应可伸缩纹理压缩(ASTC),所有这些我都将在本节中介绍。几何着色器是 OpenGL 中的第一个特性,所以让我们先来看看这个概念。

3D 对象的几何图形是底层的 3D 模型,就像形状一样,只是三维的而不是二维的。几何体有时也被称为“网格”,因为没有任何纹理映射,这就是它看起来的样子。3D 几何的另一个术语叫做“线框”,也来自于这种网状 3D 几何的外观。几何体使用“多边形”建模,每个多边形都是三角形(称为“三边形”)或四边形(称为“四边形”)。

几何着色器允许底层网格变得更加精细,而无需添加任何多边形。这允许使用“低多边形”建模方法创建 3D 模型,这降低了数据占用空间(更小的文件大小)。几何着色器允许低多边形网格看起来像高多边形网格,更平滑。几何着色器使用 GPU 来应用称为“镶嵌”的优化算法,这将添加更多的“顶点”

每个多边形由“顶点”(空间中的点)组成,这些顶点是用“边”连接的元素三角形有三个顶点和三条边,四边形有四个顶点和四条边。值得注意的是,一个四边形可以被一分为二(对角),形成两个三角形。一个四边形建模器的例子是 NeverCenter SILO2 软件,一个三角形建模器的例子是 Blender3D 软件。

渲染管道(一个 3D 层堆栈,如果你愿意的话)通常从 3D 网格(模型)顶部或皮肤上的“顶点着色器”向下通过“镶嵌着色器”,它提供对底层几何着色器如何镶嵌的微调镶嵌控制。

这一切是如何工作的超出了专业 Android 编程标题的范围,但我想在这里简要介绍一下,这样您就可以很好地了解 AEP 有多先进。

最后,ASTC 类似于 Android 4 中添加的高级 WebM 和 WebP 编解码器的更高级的 3D 版本。ASTC 在 OpenGL 4.4 和 OpenGL ES 3.1 中都有,所以它是一项用于流行 3D 视频游戏的先进技术。ASTC 允许更好的 3D 纹理贴图优化,允许应用的数据足迹和用于这些纹理贴图的内存量应用到您的 3D 多边形网格显著减少。

除了 OpenGL ES 3.1,Android 5 还提供了这个扩展包和 Java 接口,以及对使用 AEP 令人难以置信的高级 i3D 图形功能的原生支持。Android 将 AEP 扩展视为一个单独的包。如果存在ANDROID _ extension _ pack _ es31a扩展,您的可穿戴设备应用可以假定此包中的所有扩展都存在。这将使用单个**#扩展**语句启用阴影语言功能。

Android 扩展包的一个 Java 接口提供了 GLES31EXT 。在你的可穿戴设备应用清单中,你可以声明你的应用必须只安装在支持扩展包的设备上,就像这样:

<manifest>
          ...
          <uses-feature android:glEsVersion="0x00030001" />
          <uses-feature android:name="android.hardware.opengles.aep" android:required="true" />
</manifest>

接下来,我们来看看与万维网相关的浏览媒体。

WebKit 媒体 : WebView、WebAudio、WebGL 和 WebRTC

Android 的一个超级强大的特性是 WebKit API,你可以用它来显示 HTML 内容,甚至创建你自己的浏览器。Android WebView 使用 WebKit 渲染引擎来显示网站,Android 5 将其升级到最新版本的 Chromium,这相当于谷歌 Chrome 浏览器版本 37。我刚刚看了我的 Chrome 浏览器,它是 39 版本,所以这是相当新的。我预计谷歌会保持 Android 5 的这一部分是最新的,所以随着 Android 5.x 的每次更新,预计这个版本号会增加,因为在本书写作期间它已经增加到 Android 5.1。

Android WebView 类:PermissionRequest 类

除了将 Android 5 WebView 实现更新到 Chromium-37,Android 5 还将安全增强提升到了一个新的水平,通过大量的错误修复增加了 WebView 类和 WebKit 渲染引擎的稳定性。

您在 Android 5 上运行 WebView 的默认用户代理字符串已经更新,将 37.0.0.0 作为您的最新版本编号方案。

Android 5 新增了一个 PermissionRequest 类 。此类允许您的应用授予 WebView 对象访问受保护资源(如摄像机或麦克风)的权限。这是使用 WebKit APIs 完成的,比如 getUserMedia( ) 。该应用必须声明正确的 Android 权限,才能首先使用这些资源,然后再将这些权限授予 WebView 对象供其使用。

PermissionRequest 类创建您的权限请求对象,当您希望请求访问包含受保护资源的网站内容时,该类是必需的。这个类中有三个常量与您需要访问权限的数据类型相关。

RESOURCE_AUDIO_CAPTURE 资源权限将允许访问音频捕获设备,如麦克风。有一个RESOURCE _ PROTECTED _ MEDIA _ ID资源许可,它将允许您访问受保护的媒体素材,而 RESOURCE_VIDEO_CAPTURE 将允许您访问视频捕获设备,如高清数字摄像机。

PermissionRequest 类的权限请求事件通过一个**onPermissionRequest(PermissionRequest)方法调用来传递,并且可以通过使用一个onPermissionRequestCanceled(PermissionRequest)**方法调用来取消。

PermissionRequest 类具有**。格兰特()。deny( )** 分别授予或拒绝权限的方法。您将在应用的 UI 线程中调用. grant()或. deny()方法来响应权限请求。

还有一个新的**。** onShowFileChooser( ) 方法,允许您在 WebView 中使用带有文件字段的输入表单,这将启动文件选择器,允许最终用户从他们的 Android 设备中选择图像或文件。

这个 Android 5 版本还增加了对几个强大的新媒体相关开源标准的支持,包括 WebAudioWebGLWebRTC 。接下来,我将介绍这三种技术,以及它们将为您的可穿戴设备应用开发带来哪些功能。

网络音频:数字音频合成和实时处理

在这个 WebAudio API 出现之前,web 浏览器还没有强大的数字音频处理和合成能力。HTML5 中引入了一个<音频>标签,允许基本的流式音频播放支持。尽管音频标签功能强大,足以支持音频流,但对该数字音频流的所有处理都必须在服务器端完成(或者在服务器上发布数字音频之前)。

要真正实现强大的数字音频处理,数字音频必须能够响应客户端复杂的数字音频(编程)应用,也就是说,在 web 浏览器或嵌入式操作系统浏览器内部。

WebAudio API 提供了这种客户端处理能力。该 API 旨在支持大量的数字音频处理应用。API 是以模块化的方式设计的,因此随着时间的推移,可以添加更多的高级功能。

WebAudio API 支持各种复杂的数字音频应用,包括游戏和交互式音频设计和合成应用。我会将虚拟合成器、音频序列器和音乐创作软件包括在可以使用 WebAudio API 创建的数字音频应用类型中,这使得它非常令人印象深刻。任何有合适硬件支持的可穿戴设备都可以利用这些优势!

WebAudio 与 WebGL 提供的更高级的图形特性有很好的协同作用,我将在下一节介绍这些特性。WebAudio API 具有模块化数字音频样本路由(在模拟音频中,这将被称为信号路由),提供创建复杂混音的能力,并允许开发人员创建高度详细的特效管道。

这个 WebAudio API 将允许开发者对多个数字音频数据进行编程“发送”(源),以及提交混音。API 通过使用 32 位浮点数据格式进行内部处理来支持高动态范围。

该 API 允许音频开发人员利用样本精确的预定声音回放,具有非常低的延迟。这对于需要高度节奏精度的音乐应用来说是必要的,比如架子鼓和音频音序器。低延迟(延时)使得动态(实时)创建数字音频特效成为可能。

API 允许包络、渐强、渐弱、颗粒(噪声)效果、滤波器扫描或 lfo(低频振荡)等功能的音频参数自动化。开发人员可以灵活地处理音频输入通道,允许实时分离或合并输入音频。

您可以处理从音频或视频媒体元素中提取的音频源,或者通过使用方法调用获得的媒体流处理现场音频输入。getUserMedia( ) 。您还可以集成 WebAudio 和 WebRTC,这将在我介绍完 WebGL 之后介绍。您可以通过使用 WebRTC 的MediaStreamAudioSourceNode方法来处理从远程对等点接收的音频。

开发人员可以使用 JavaScript 执行数字音频合成或数字音频处理,甚至可以通过使用MediaStreamAudioDestinationNode方法将生成的(或处理的)音频流发送到远程对等点。

3D 音频还通过空间化音频得到支持,空间化音频支持广泛的 3D 游戏和沉浸式环境。还有几种音频声相模型,包括 HRTF(热相关传递函数)、等功率和直通声相。

其他值得注意的功能包括距离衰减、多普勒频移、音锥、对障碍物(或闭塞)的支持以及线性卷积引擎,该引擎允许您创建一系列高质量的特殊效果,例如在不同类型的房间(环境声音空间)中模拟音频,如圆形剧场、大教堂、音乐厅、走廊、隧道、洞穴和森林。

WebAudio API 也支持振荡器(音调生成);声音设计的波形效果:失真;非线性音频处理效果;实时、时域和频率分析;音乐可视化支持;高效双二阶滤波器,可用于低通、高通和其它常见滤波器应用;梳状滤波器效果;样本反转;以及用于混合的整体控制和增甜的动态压缩。智能手表是否可以利用这一点是一个与音频硬件功能支持相关的问题。

接下来让我们看看 WebGL ,它甚至比 WebAudio 更强大,适用于 i3D 类型的媒体,而不是数字音频类型。

WebGL 支持:交互式 3D 渲染、着色和动画

WebGL 就是它听起来的样子,OpenGL ES for the web (browser)。最初的 WebGL (1.0)支持 OpenGL ES 1.1 和 2.0 规范,下一个 WebGL 2 (2.0)规范将支持 OpenGL ES 3.0 和 3.1 以及 1.1 和 2.0。WebGL 和 OpenGL 都由 Khronos Group 管理,这是一个管理 i3D 相关技术开源规范的开发人员团体,如 OpenGL、OpenGL ES、OpenCL、OpenSL、OpenSL ES、Collada、WebGL、WebCL、OpenMAX、gITF 和许多其他 3D 相关技术。

您可以在 Khronos 网站和 W3C 网站上找到更多关于 WebGL 规范的信息。这些网站位于以下 URL:

[`www.khronos.org/webgl/`](https://www.khronos.org/webgl/)
[www.w3.org/community/declarative3d/wiki/Related_technologies](http://www.w3.org/community/declarative3d/wiki/Related_technologies)

在使用 WebKit 支持 WebGL 2.0 之前,Pro Android 可穿戴设备开发人员将希望使用之前讨论的 OpenGL ES 3.1(如果需要,可以使用 AEP),而不使用 WebGL,因为使用 Android 的原生 OpenGL ES 会渲染得更快。

WebRTC 支持:可穿戴设备的实时通信

WebRTC 标准是一个免费的开源项目,它为浏览器和移动应用提供了 ?? 实时通信功能。

WebRTC API 为 web 应用开发人员提供了在 web 上编写丰富的实时多媒体应用(如聊天、音频聊天或视频聊天)的能力,而无需插件、下载或安装。它的目的是帮助构建一个健壮的免费 RTC 平台,该平台可以跨多个 web 浏览器以及多个操作系统平台工作。

像 WebAudio 和 WebGL 一样,这是通过使用 WebRTC API 来完成的。WebRTC 组件已经过优化,用于在 web 浏览器和 CE(消费电子)设备(也称为嵌入式设备,如 iTV、智能手表、智能手机、平板电脑、电子阅读器、游戏控制台等)内部进行实时音频和视频通信。

WebRTC API 允许为 web 浏览器、移动平台、平板电脑或电子阅读器平台以及智能手表和智能眼镜等物联网设备开发健壮、专业质量的 RTC 应用。

这个 WebRTC API 允许这些消费电子设备类型中的每一个使用所有平台软件和硬件制造商都同意的一组通用协议来彼此通信。

WebRTC 计划是一个开放的行业项目,目前得到了 Google、Mozilla 和 Opera 的认可和支持。WebRTC API 网站由 Google Chrome 团队维护。

Android MediaBrowser 类:浏览第三方媒体

Android 5 引入了可穿戴应用使用 android.media.browse API 浏览其他应用的媒体内容库的能力。为了公开你的可穿戴应用中的媒体内容,扩展 MediaBrowserService 类。

MediaBrowserService 的自定义类实现(子类)将提供对 MediaSession 的访问。令牌嵌套类。应该这样做,以便您的可穿戴应用可以播放通过 MediaBrowserService 服务类提供的媒体内容,该服务类是通过 Android 操作系统安排的。

为了与这个 MediaBrowserService 对象进行交互,可以使用 MediaBrowser 类(object)。为此,您首先要为您的 MediaSession 类(对象)指定组件名。这将在您创建 MediaBrowser 实例的同时通过使用构造函数方法来完成。

使用 MediaBrowser 对象实例,您的应用可以连接到 MediaBrowserService 对象,您已经“连接”或引用了该对象。这个 MediaBrowserService 对象将获得一个 MediaSession。Token 对象播放新的媒体内容,这是通过 Android 服务公开的。

Android Camera 2 API: UHD 图像处理支持

Android 5 引入了新的 android.hardware.camera2 包,其 API(类、接口、方法、属性和常数)允许开发者实现**(高动态范围图像)摄影捕捉以及 HDRI 处理。已经有一款在表冠上带有 HDRI 摄像头的智能手表型号 Hyetis。随着越来越多的产品添加到这些相机中,您可以预期 HDRI 相机支持将会掀起可穿戴应用开发的风暴。**

现在,您可以在 Java 代码中访问操作系统可用的 HDRI 相机设备。你可以使用一个。** getCameraIdList( ) 方法确定用户的硬件设备可以使用摄像机,然后连接到特定的摄像机硬件设备,使用**。openCamera( )** 方法调用。

一旦完成这些,您就可以开始捕捉 HDRIs,方法是创建一个 CameraCaptureSession 对象,然后指定 Surface 对象,将捕捉到的图像发送到可穿戴应用中进行显示。这些 CameraCaptureSession 对象可以配置为捕捉一个单个图像镜头,或者在一个连拍图像镜头中捕捉多个 HDRIs。

为了在捕捉到新图像时通知可穿戴应用,您实现了 CameraCaptureSession。CaptureCallback 侦听器,并在您的捕获请求中设置它。当系统完成图像捕获请求时,CameraCaptureSession。CaptureCallback 侦听器将接收对的调用。****onCaptureCompleted(),它将为您的可穿戴应用提供一个封装在 CaptureResult 对象中的图像捕获元数据对象。

还有一个 CameraCharacteristics 类(object),它将允许您的可穿戴应用检测给定硬件设备上有哪些高清摄像头功能。该对象具有一个INFO _ SUPPORTED _ HARDWARE _ LEVEL属性,它将包含表示功能级别的数据。

要求所有兼容相机的 Android 设备至少支持INFO _ SUPPORTED _ HARDWARE _ LEVEL _ LEGACY硬件支持数据变量级别。此属性包含对非 HDRI 相机功能的支持,这些功能基本上等同于“已弃用”(已停止使用,但仍受支持)的相机 API。所以基本上这个 Camera 2 API 取代了原来的 camera (Camera1) API。支持INFO _ SUPPORTED _ HARDWARE _ LEVEL _ FULL硬件支持数据变量级别的 Android 设备能够使用超快帧速率手动控制图像捕捉和图像后处理,以及捕捉高分辨率图像

Android 5 通知:锁屏和元数据

Android 5 在其锁屏功能和元数据功能中增加了一些新的通知功能。接下来我们来看看这些。

锁屏通知:隐私保护控制 API

Android 5 锁屏 API 现在有了呈现通知的能力。您的应用用户现在可以通过 Android 操作系统设置,选择是否允许在安全(锁定)的 Android 设备屏幕上看到“敏感”(私人)通知内容。当通知显示在用户的锁屏上时,开发人员可以控制锁屏上可见的详细程度,这代表了开发越来越受欢迎的锁屏应用时非常需要的灵活性增加。

要控制可见度级别,请调用**。** setVisibility( ) 方法然后指定其中一个可见性常量: privatepublicsecret

VISIBILITY_PRIVATE 常量告诉锁屏只能显示最基本的信息,比如通知的图标,但是会隐藏通知的全部内容(因为它被认为是私有的)。 VISIBILITY_PUBLIC 常量告诉你的锁屏允许显示一个通知的全部内容(因为它被认为是公开的),而 VISIBILITY_SECRET 常量告诉锁屏它必须什么都不显示,不包括任何通知文本,甚至通知图标(嘘,这是一个秘密)。当您将 visibility 常量设置为 VISIBILITY_PRIVATE 时,您还可以选择提供锁屏通知内容的“编辑”(有限或删节)版本,这将隐藏任何个人详细信息。

假设您想创建一个短信(SMS 短消息服务)可穿戴应用,并且您想要显示显示“5 条新 SMS 文本消息到达”的通知,并且您需要隐藏实际的消息文本以及发送者身份。

要提供此替代通知,首先使用 Notification.Builder 创建替换通知。创建私有通知对象时,通过 setPublicVersion()方法将替换通知附加到该对象。

通知元数据:智能通知分类

Android 5 现在支持元数据属性,你可以将它与你的可穿戴设备应用通知相关联。这允许您的应用更智能地对这些通知进行排序。要安装这个元数据,您可以在您的通知中调用三个方法中的任何一个(或全部)。构建器当您使用关联的构建器对象构建通知对象时。

三种方法中的第一种,a .setCategory()方法,指示 Android 当 Android 设备碰巧处于优先模式时,如何处理你的可穿戴应用的通知。例如,您可以为通知添加代表即时消息、来电或报警通知的类别。类别是字符串常量。

那个。setPriority()方法设置通知对象的优先级。您可以将通知对象的优先级设置为比普通系统通知更重要或更不重要。如果您的通知对象有声音(或振动),优先级字段设置为 PRIORITY_MAXPRIORITY_HIGH 的通知对象会出现在一个小的浮动窗口中。

那个。addPerson()方法调用将允许可穿戴设备开发人员向通知对象添加一个或多个人。这些人应该与您的通知对象相关。您的可穿戴应用可能会利用这一点向 Android 操作系统发出信号,通知对象应该在来自使用该方法调用添加的人员后被分组在一起。您还可以使用此方法调用,根据优先级标记将来自这些人的通知划分为更重要或不太重要。

更多 Android 5 操作系统增强功能

最后,让我们看看 Android 5 中改进的其他几个领域,这些领域可以在 Pro Android 可穿戴设备应用开发中加以利用。Android 5 OS 的最近应用和文档区已经彻底检修,同样的还有通过目录结构管理文件。此外,还有最重要的第二屏幕功能,它允许 Android 设备相互反串(不得不在书中有争议地旋转一些东西),以便智能手表或智能眼镜可以控制像 UHD·4K 独立电视这样的东西!

最近屏幕:并发文档支持

在 5 之前的 Android 操作系统版本中,“最近”屏幕将只为终端用户最近交互的每个应用显示一个任务。这提供了有限的多任务处理能力,需要在 Android 5 中进行大幅升级。这使得 Android 5 能够更好地与所有其他流行的操作系统竞争。

使用 Android 5,您的可穿戴应用可以打开更多任务,根据需要为应用文档添加额外的并发活动屏幕。该功能将增加急需的多任务支持,让用户只需使用新的 recents 屏幕,就可以在各个活动屏幕(包含用户文档)之间高效切换。这为当前正在使用的 Android 5 应用提供了一致的任务切换用户体验。

“最近通话”屏幕中可能使用的并发任务示例包括任何移动网络浏览器中的多个打开的选项卡、游戏应用中的任何并发游戏会话、业务生产力应用之一中的业务文档或任何消息应用中的文本消息。

你的可穿戴设备应用可以通过使用 Android ActivityManager 来管理最近屏幕上的任务。AppTask 类(或对象)。这是 ActivityManager 类的八个嵌套类之一,activity manager 类是 android.app 包的一部分。这个类很重要,因为它允许你的应用看到可能与你的应用一起运行的所有其他 Android 应用!

这个 Android ActivityManager 类允许可穿戴设备开发人员以各种方式与运行在 Android 操作系统中的所有当前活动的活动对象进行交互。这个类有八个嵌套的类结构,这将允许你与运行在你的用户的 Android 操作系统的化身(当前内存或处理器部署)上的接口。我将在这里介绍它们,因为了解它们可以做些什么,让您的可穿戴设备应用了解它们周围发生的事情,这对您非常重要!

活动经理。AppTask 类允许您管理应用的任务(因此得名)。还有一个 ActivityManager。MemoryInfo 类,它允许您通过使用. getMemoryInfo(ActivityManager)来轮询关于可用内存的操作系统信息。MemoryInfo)方法调用。

活动经理。ProcessErrorStateInfo 类将允许开发人员检索关于处于错误状态的操作系统进程(线程)的信息。活动经理。RecentTaskInfo 将允许您检索有关用户最近开始或访问的任务的信息。

活动经理。runningapprocessinfo 类将允许您检索关于当前正在运行的进程的系统信息,以及 ActivityManager。RunningServiceInfo 类将允许您检索关于当前在 Android 操作系统中运行的特定服务的系统信息。

活动经理。RunningTaskInfo 类将允许您处理关于当前正在操作系统线程管理器中运行的特定任务的系统信息。活动经理。TaskDescription 类将允许您在最近的任务列表中检索关于当前活动的信息。

要插入一个逻辑中断,以便系统将活动视为一个新任务,您可以在使用启动活动时使用您的FLAG _ ACTIVITY _ NEW _ DOCUMENT常量。 startActivity( ) 方法调用。您还可以通过在 AndroidManifest XML 文件中将您的< activity > XML 元素的 documentLaunchMode 属性设置为“intoExisting”或“always”来实现此行为。

为了避免弄乱用户的最近任务屏幕,您可以设定从应用内部显示的最近任务的最大数量,这将限制可以出现在该屏幕内部的任务。为此,您可以设置名为 android:maxRecents 的父标签的参数。

当前可以指定的最大值是每个用户 50 个任务,除非你在一个低内存的 Android 设备上,在这种情况下,它被设置为 25 个。用户最近屏幕中的任务也可以设置为重启后保持。为了控制这种任务持久性行为,使用 android:persistableMode 参数。

您也可以在“最近”屏幕中更改活动的可视属性。这包括活动的颜色、标签和图标。这是通过调用来完成的。setTaskDescription( ) 活动的方法。

数据存储:目录结构选择支持

另一个令人印象深刻的 Android 5 升级与数据存储访问有关。Android 存储访问框架功能已经扩展到允许开发人员(以及他们的用户)选择整个目录子树。这将允许您的可穿戴应用对包含在给定目录文件夹结构中的所有文档进行读取和写入数据存储访问,而无需用户确认每个要启动的项目!

要选择整个目录子树,您需要创建并发送一个OPEN _ DOCUMENT _ TREEIntent 对象。Android 操作系统将显示所有支持子树选择的文档提供者对象实例。这允许最终用户浏览和选择目录。返回的 URI 对象将引用对所选子树的访问。然后就可以使用了。buildChildDocumentsUriUsingTree()方法调用与结合使用。buildDocumentUriUsingTree( ) 方法调用,然后使用一个**。query( )** 方法调用来探索子树内部的数据。

还有一个新的**。** createDocument( ) 方法调用,它允许您在子树下的任何位置创建一个新的文档或目录结构。如果您的可穿戴应用需要管理一个现有的文档,您会希望使用一个**。renameDocument( )** 或一个**。** deleteDocument( ) 方法调用。您还可以在发出这些调用之前检查 COLUMN_FLAGS 常量来验证提供者对这些调用的支持。

如果您希望实现 DocumentsProvider 对象,并且还希望支持子树数据选择,那么您将希望利用名为的方法。isChildDocument( ) 然后在 COLUMN_FLAGS 属性中设置 FLAG_SUPPORTS_IS_CHILD 常量,要求 Android OS 授予子文档支持。

Android 5 还在共享存储上引入了新的特定于包的目录。您的应用可以将媒体文件放在那里,以便包含在 MediaStore 中。

一个新的**。getExternalMediaDi****RS()方法调用将为所有共享存储设备上的外部媒体存储目录返回一个路径引用**。

应用不需要额外的权限来访问任何返回的路径,这类似于**的功能。****getExternalFilesDir()**方法调用。Android 操作系统将定期扫描位于这些目录中的媒体。您还可以通过使用 MediaScannerConnection 对象(类)来强制操作系统执行这些媒体素材扫描之一,这将允许开发人员随时扫描以检测新媒体内容的存在。该类实现了一个 ServiceConnection 接口,还具有两个嵌套的助手类。

一个媒体扫描连接。MediaScannerConnectionClient嵌套的 helper 类将为开发人员提供所需的接口,以便在建立到 MediaScanner 服务的任何连接时或文件扫描完成时通知客户端 MediaScannerConnection 对象。

另一个 MediaScannerConnection。OnScanCompletedListener 嵌套的帮助器类提供了一个侦听器接口,该接口可用于侦听并通知任何客户端对所请求的媒体文件的扫描结果。

第二个屏幕:屏幕捕捉和屏幕共享

最后,Android 5 OS 通过允许开发人员使用全新的 android.media.projection 包及其强大的 API,为他们的专业 Android 可穿戴应用添加屏幕捕捉和屏幕共享功能,提升了其第二屏幕功能。

第二屏幕功能可能会非常有用,尤其是对于可穿戴设备,正如你所想象的那样!例如,如果您的用户希望在视频会议应用中实现屏幕共享,他们可以使用 2K 或 4K Android TV 功能的 iTV 电视机,观看实物大小的另一场派对。

还有一个**。****createVirtualDisplay()**方法这是一种新的方法,允许你的可穿戴设备应用捕捉你的主屏幕(默认显示)的内容,并将屏幕捕捉数据放入一个表面对象中。然后,您的应用可以通过网络发送这些数据。该 API 仅允许捕获未受保护的屏幕内容,不适用于系统音频捕获。

要开始屏幕捕捉过程,您的应用必须首先通过使用 Intent 启动屏幕捕捉对话框来请求用户的许可,这是通过使用**获得的。****createscrecaptureintent()方法调用。对该方法的调用将返回一个 Intent 对象,该对象必须传递给。****startActivityForResult()方法以便启动屏幕截图。要检索屏幕截图,请使用。****getMediaProjection()**方法。

通过使用**。getmedia projection(int result code,Intent resultData)** 方法调用,然后可以访问 MediaProjection 对象,该对象将从一个成功的。createScreenCaptureIntent()屏幕捕获请求。

恭喜你!您刚刚更新了 Android 5 操作系统添加的关键内容,这些内容将帮助您快速了解 Android 4.4(及之前版本)的知识库。其中许多可以创造性地用于 Pro Android 可穿戴设备应用开发。

摘要

这一章仔细研究了除材质设计之外的所有功能,这在 Android 5 的第一章中有详细介绍。这包括了从操作系统特性到新媒体特性,到新版本的 OpenGL,以及更远的东西(嘿,到无限甚至更远!).

首先,我讨论了 Android 项目 Volta,该项目旨在允许开发人员社区将电源管理和优化掌握在自己手中。这可以通过使用作业调度器作业信息类,结合电池历史工具来完成。

接下来,我讨论了新的 Android 网络连接技术改进,包括 NFC 和蓝牙,以及新的蓝牙 LE APIs。你学习了 Androidconnectivity manager类,以及 NDEFAndroid Beam 技术,以及如何在 Java 7 中实现它们。

接下来,我讨论了 Android 5 新增的所有酷多媒体所带来的所有新的惊喜机会。我讨论了用于数字视频回放的 MediaSessionMediaController 类,以及用于数字音频的 AudioTrack ,您学习了如何使用它们进行新媒体回放。

接下来,我深入研究了 Open GL ES 3.1Android 扩展包,并解释了如何实现它们,将 Open GL 从 3.1 升级到 4.4,将所有新的实时 i3D 渲染能力添加到您的 Android i3D 应用中。

最后,我讨论了 WebKit 支持和 WebView 类,以及对最新 WebAudioWebGLWebRTCAPI 的新支持。最后,我介绍了 Android recents 屏幕的新增功能、新的文件(目录)管理功能、新的第二屏幕屏幕捕捉功能,以及如何在您的专业 Android 可穿戴应用中实现这些很酷的新功能。

在下一章中,你将了解软件开发环境 IntelliJ IDEA,你将在本书的其余部分使用它来开发 Android 5 Wear SDK 应用。这是为了让你在本书的学习过程中,对将要用来编写 Java 7 代码和 XML 标记的工具有一个坚实的基础。**

四、探索 Android Studio:熟悉 IntelliJ IDEA

现在你已经对 Android 中的新特性有了一个全面的概述,包括新的材质设计范例和其他 Android 5 的新特性,本章将看看 Android Studio 的集成开发环境IntelliJ IDEA 。在第二章的中,您已经完成了开发工作站的组装,所以现在剩下要做的就是让您了解 IDE 软件工具的详细情况,您将在本书中使用该工具。一旦解决了这个问题,您就可以在本书接下来的 13 章中专注于 Java 7 编码或 XML 标记。

让我们先看看 IntelliJ 如何让您了解它的所有特性,然后看看如何使用 Android SDK 管理器找出当前安装了哪些 Android APIs。我想向您展示如何确保为 Wear 和 Android TV 安装所有最新的 API,这样您就可以在升级 IDE 方面进行一些练习。

在那之后,你将在这一章的剩余部分学习你的 IntelliJ 思想将如何被布局以及它的各种功能组件。然后,我将解释如何使用 IDEA 的一些特性和功能,以及 IDEA 与 Android SDK 的接口来构建可穿戴应用。我将向您展示如何使用 SDK 管理器,以便您可以安装 API 来开发 Google cloud 可穿戴应用。然后,我将向您展示如何创建 Wear 智能手表应用,以及 Wear 组件的工作原理。

更新 IntelliJ IDEA:使用更新信息对话框

如果您还没有这样做,请使用您在第二章中创建的快速启动图标启动 Android Studio 环境。这将启动 IntelliJ IDEA,它是 Android Studio 的基础,取代了 Android 4 . x 版和之前版本中使用的 Eclipse ADT IDE。

正如你在图 4-1 中看到的,如果 Android Studio 有更新,你的欢迎使用 Android Studio 启动屏幕会在右上角有一个浅绿色的更新信息消息。幸运的是,当我今天发布时,有一个从 1.0.1 到 1.0.2 的更新,所以我可以向您展示更新中涉及的工作流程,因为您很可能会在可穿戴应用开发的某个时间点遇到这种情况。

9781430265504_Fig04-01.jpg

图 4-1 。启动 Android Studio,单击 update 链接,单击 Update and Restart 按钮,然后更新 IDE

点击图 4-1 中红色框中突出显示的蓝色更新链接,启动 Android Studio 更新流程。这将打开一个对话框,显示在图 4-1 的右上角,它会给你当前的构建,当前的版本号,以及补丁的大小。这个补丁只会更新你的 Android Studio 安装中已经改变的部分。这被称为增量更新,这比再次下载完整的 1gb(可能更多)Android Studio 开发环境更可取,因为这是多余的。点击更新重启按钮,你会看到更新进度条对话框,如图图 4-1 右下方所示,你将会更新到 Android Studio 的最新版本。

探索 IntelliJ IDEA:帮助、提示和键映射

在你更新并重新启动 Android Studio (IntelliJ IDEA)后,欢迎使用 Android Studio 屏幕的左下方会显示最新的版本号,是 1.0.2,如图图 4-2 所示。点击图 4-2 左下方的文档和操作选项。这将打开文档和操作面板,显示在图 4-2 的右侧。

9781430265504_Fig04-02.jpg

图 4-2 。一旦 Android Studio 重启,点击文档和操作选项来浏览 IntelliJ 文档

正如你所看到的,有许多对你的想法学习曲线爬升有帮助的领域供你探索,包括阅读帮助文档,你将在接下来看到,每日提示对话框,默认键盘映射参考,,如果你有无限的带宽, JetBrains TV

JetBrains 是这个 IntelliJ 想法的开发者。如果你想为 IntelliJ 开发第三方插件,这超出了本书的范围,也可以选择接受这方面的培训。

点击文档和操作面板顶部的阅读帮助选项,打开他们网站的 IntelliJ IDEA 帮助部分,可以在图 4-3 中看到。有关新功能、帮助系统、快速入门指南、基本思想概念、教程部分和类似参考资料的信息按逻辑分组。

9781430265504_Fig04-03.jpg

图 4-3 。点击阅读帮助选项打开 JetBrains IntelliJ IDEA 第 14 版网络帮助网站

如果你想掌握集成开发环境,我建议你在某个时候通读所有这些材质,在本书的过程中,你将使用集成开发环境来开发 Pro Android 可穿戴设备应用。在本章中,我还将介绍 IntelliJ 思想的基础。

点击获取帮助链接,查看您有哪些关于 IntelliJ IDEA 的帮助选项。正如你在图 4-4 中看到的,点击链接将在网站的左侧内容导航窗格中打开一个子面板,以链接的形式显示更多的细节,你可以点击它来探索 IntelliJ IDEA 帮助系统的不同区域。

9781430265504_Fig04-04.jpg

图 4-4 。单击左侧导航窗格中的获取帮助导航链接,并仔细阅读列出的小节

其中包括如何使用帮助主题、如何使用“日积月累”对话框、如何使用 IntelliJ 在线资源、如何使用 IDEA 生产力指南、如何报告您在 IntelliJ IDEA 安装(或功能)中遇到的任何问题、如何提交关于您希望在未来版本中看到哪些功能的反馈,以及如果您喜欢使用键盘快捷键而不是鼠标和 IDEA 菜单系统,您的按键映射参考。

在这一章的后面,我将回顾一些在概念部分阐述的核心 IntelliJ IDEA 概念,如图 4-4 中用灰色突出显示的。我会这样做,这样在你开始在第五章和本书的整个篇幅中认真使用这些概念之前,你已经对这个想法有了一些核心概念。

如果你是好奇型的,现在就去浏览一些在线资料,这样当我在本书后面开始认真讨论它时,你就熟悉它了。

接下来,让我们看看 Android Studio 启动屏幕上的配置菜单,了解如何使用 SDK 管理器工具来定制您的想法。

配置 Android Studio:使用 SDK 管理器

因为这是一个 Pro Android 标题,所以您可能有一些使用 Eclipse ADT IDE 进行 Android 4.4(和更早版本)应用开发的经验,它包括一个 Android SDK 管理器菜单选项和对话框。在 IntelliJ IDEA 中也可以通过使用配置image SDK 管理器面板序列来访问该工具,如图图 4-5 所示。

9781430265504_Fig04-05.jpg

图 4-5 。单击返回箭头返回到快速入门,然后单击配置选项和 SDK 管理器选项

Android Studio 配置面板 还可以访问您的 IntelliJ IDEA 设置的对话框,管理 IntelliJ IDEA 的插件,并设置导入导出参数。

你真的应该花些时间来探索这些对话。在本书中,您也将使用其中的一些对话框,这样您将获得一些在 Pro Android 可穿戴设备开发工作流程中最大限度地使用 IntelliJ IDEA 的实践经验。

一旦你点击 SDK 管理器选项,如图 4-5 顶部所示,这将打开 Android SDK 管理器对话框,如图图 4-6 所示。请注意,在对话框的底部有一个抓取 URL 进度条,它可以到达下载安全套接字层(dl-ssl)谷歌服务器的存储库,并根据 Android 5 谷歌服务器上的最新 API 检查您想法中的所有内容。这是为了让下一个对话框可以推荐您安装的软件包,以便您可以将您的 Android Studio (IntelliJ 14 IDEA)升级到最新的功能,或硬件平台(Wear SDK、Android TV、Auto SDK 等。)支撑位。

9781430265504_Fig04-06.jpg

图 4-6 。一旦你启动 Android SDK 管理器,你会看到抓取 URL 的进度条 加载 API

正如你在图 4-7 中看到的,这个 Android SDK 管理器将填充那些它认为你应该选中的复选框,以调用更新或新的 API。

9781430265504_Fig04-07.jpg

图 4-7 。Android SDK 管理器对话框(左上,右下)默认谷歌 USB 驱动选择

Android Studio 1.0.2 有更新,或者你可以将其视为 Android Studio 1.0.2 的新 API,这里描述为 Android SDK 工具版本 24.0.2,这是一个内部编号模式 ,显示在 Rev(ision)列中。

此外,还为 Android Wear 或 Android TV 提供了七种新的系统映像,适用于 ARM 和英特尔(Atom)处理器硬件。我按照建议检查了它们,因为在第五章的例子中需要它们,在那里我将介绍你的 AVD (Android 虚拟设备)模拟器的创建。这些可以在图 4-7 的左下方看到,我不得不把它(对话框)剪成两半以适合页面。

在图 4-7 的右侧,可以看到底部有新的 Android 5 支持工具(新的支持资源库和新的支持库),以及新的 Google USB 驱动(版本 11)。支持库及其存储库非常重要,因为它们提供了向后兼容性。使用支持库可以让你为 Android 5 开发,并且仍然支持早期版本的操作系统,如 2.3.7 (Kindle Fire)和 4.x。

你也可以使用这个 Android SDK 管理器对话框来安装“额外的东西”,比如 Google Web Driver,它们显示在图 4-7 的右下角。

一旦你点击 Install 11 Packages 按钮,这些都将被安装(或更新)到你的 Android Studio 中,正如你现在所知道的,这是 IntelliJ IDEA 的 14 版本和 Android 5.0.2 SDK 的融合。如果 Android Studio 是 1.0.2,那么 Android OS 将是 5.0.2。

在你安装任何 API 之前,本质上是新的软件包,你必须同意他们的每个许可“条款和条件”,显示在图 4-8 的选择要安装的包对话框中。选择以红色突出显示的接受许可证单选按钮,并单击安装按钮继续安装。

9781430265504_Fig04-08.jpg

图 4-8 。选择要安装的软件包对话框和以及接受许可协议

我点击了安装按钮,本来应该是一个相当长的安装过程在不到五秒钟内就过去了!在我点击安装按钮几秒钟后,出现了如图 4-9 所示的对话框。这让我有点困惑,所以我等着看是否会弹出下载日志对话框。果然如此,并充满了错误启动!哦天啊!

9781430265504_Fig04-09.jpg

图 4-9 。显示下载 SDK 更新进度对话栏 ,位于对话框底部

我选择安装的每个软件包都出现了“下载中断:错误记录 MAC”的错误,如图 4-10 中的所示。

9781430265504_Fig04-10.jpg

图 4-10 。显示 Android SDK 管理器日志对话框,下载中断:坏记录 MAC 错误

注意日志对话框的左下方,在图 4-10 的中用红色突出显示,说明安装已经完成,而没有安装任何东西!因此,我的预感是正确的,当我谷歌这个错误时,我没有找到这个问题的解决方案,所以我决定尝试以一个系统管理员的身份启动 Android Studio,这样我就有了顶级管理员权限。我将向您展示这个工作过程,因为当软件安装不起作用时,这总是我尝试的第二种方法,因为有时文件试图写入硬盘驱动器,但没有权限这样做!

以管理员身份运行:使用管理员权限 安装

在 Windows 中调用管理员运行命令有两种方式,如图图 4-11 和图 4-12 所示。很少有开发者知道的很酷的快捷方式是右击 Android Studio 任务栏启动图标,选择 Android Studio image以管理员身份运行。这显示在图 4-11 中,还有一个更复杂的 Android Studio image属性方法,我将在下面解释。

9781430265504_Fig04-11.jpg

图 4-11 。右击 Android Studio 图标,选择以管理员身份运行

9781430265504_Fig04-12.jpg

图 4-12 。在 bin 子文件夹中查找 studio64 可执行文件;右键单击并选择属性以查看其属性对话框(如右侧所示)

从同一个菜单中,您还可以选择属性菜单选项,并打开 Android Studio 文件的属性对话框,它会告诉您 EXE 文件的名称以及它在硬盘驱动器上的位置。

有了这些信息,您就可以在 Windows 资源管理器(或 Linux OS 文件管理工具)中右键单击该文件,然后选择以管理员身份运行选项。从那时起,在您再次使用一个配置的image SDK 管理器序列之前,您以管理员身份启动 Android Studio。然后再次尝试更新(升级),这一次,用管理员权限!

图 4-12 显示了带有目标文件夹的 Android Studio 属性对话框,以及您想要使用studio64.exe(64 位版本)作为文件的事实,您将使用与图 4-11 中所示完全相同的菜单序列右键单击并启动。

正如你在图 4-13 中看到的,安装现在正以极其缓慢的速度进行,这意味着这一次,我得到了一个非常不同的结果!这意味着更新可能会成功,所以如果没有日志对话框弹出,以管理员身份运行将解决问题。

9781430265504_Fig04-13.jpg

图 4-13 。使用 SDK 管理器对话框下载任何新的 Android SDK 更新

我想向您展示这个 SDK 管理器 API 更新困境的解决方案,以防您遇到它,因为没有很多网站提供这个关于如何作为管理员启动 IntelliJ IDEA 的快速而简单的变体!

值得注意的是,您不必总是以管理员身份启动 Android Studio 1 . 0 . 2(IntelliJ IDEA 14)来使用开发环境,只有当您尝试更新 SDK 环境并遇到与读取或写入操作系统硬盘驱动器上被视为“敏感”(或特权)的文件相关的错误时才需要这样做。

在第二次尝试之后,我没有弹出 Android SDK 管理器日志对话框(窗口)!相反,在这个安装过程的最后,我看到了 Android Tools 更新的消息对话框,可以在图 4-14 中看到。

9781430265504_Fig04-14.jpg

图 4-14 。一旦你更新了你的 SDK,你会看到 Android 工具更新对话框

该对话框建议关闭 SDK 管理器窗口,然后重新打开它。我把这个建议带到了下一个层次,关闭了 Android Studio (IntelliJ IDEA)并重新启动它,将最新版本加载到内存中。我这样做是为了 100%确保内存中的一切都是 Android Studio 1.0.2“干净的”

让我们再次使用配置image SDK 管理器选项窗格序列,你会看到 Android SDK 管理器显示它现在已经安装。这显示在图 4-15 中,如你所见,在你试图更新或安装的东西旁边有一个文件夹检查已安装图标。

9781430265504_Fig04-15.jpg

图 4-15 。使用配置image SDK 管理器序列来启动 SDK 管理器并确认安装

在启动 Android Studio 时,只要你看到绿色的小更新对话框,你就会想要执行这个工作过程(参考图 4-1 )。

这个绿色的对话框(实际上更像是一个警告贴)会告诉你 Android Studio (IntelliJ IDEA)有一个更新正在等待。这将提醒您还需要使用您的配置image SDK 管理器面板序列,因为 SDK、驱动程序、库、存储库、服务和系统映像的更新几乎总是与 IntelliJ IDEA 本身的每个主要(和次要)更新同步进行!

接下来,我想给你一个 IntelliJ IDEA 的快速概述,并介绍有关它如何工作的概念,以便你在我在本章稍后实际使用该想法创建 Android 项目之前有一个鸟瞰图,以及在第五章当你将创建 AVD 仿真器(虚拟设备)时,你知道如何创建和测试 Android 项目。

学习 IntelliJ IDEA 基础知识:项目和 SDK

IntelliJ IDEA 文档包含两个主要级别。如果你仔细回顾一下,你会发现这一点。其中一些将适用于作为 Android 应用开发人员的您,一些将适用于 Google 的 Android Studio 开发团队,因为它涉及到集成定制的 SDK 并将它们插入 IntelliJ IDEA 以创建平台,如您刚刚升级到的 Android Studio 1.0.2(或更高版本)平台。

IntelliJ 项目级别:开发 Android 应用

当您使用 IntelliJ 思想时,您需要为您的每个应用创建一个“项目”。您将在本章的稍后部分执行此操作,这样您就可以看到所涉及的工作流程。IntelliJ 项目用于将应用组织成功能开发组件素材。作为一名专业的 Android 开发人员,您知道这包括 Java 代码、XML 标记、数字图像、数字视频、数字音频、build.gradle 和 AndroidManifest.xml 文件,以及您刚刚在 SDK 管理器中安装的组件,这些组件也需要在您的应用中,以便为您在 Java 或 Android SDK 代码基础上编码(和标记)的内容提供基础。

一个完成的或“编译的”可穿戴应用的 APK(应用包)可能看起来像一个文件,但它实际上包含大量离散的或“隔离的”模块,这些模块提供类似于 Java 中的包的代码组织。IntelliJ IDEA 项目定义了在任何给定的可穿戴应用中使用哪些模块。

这种项目方法允许开发人员以高度可视化的方式在 ide(集成开发环境)内将项目组合在一起,并使用可视化开发编辑器将这些功能模块联系在一起。这类似于文字处理器,但它是为编写代码而不是业务文档而优化的,并且通常使用缩写 IDE。

澄清一下,这个 IntelliJ IDEA“项目”并不包含您实际的开发素材,在 IntelliJ 术语中称为“工件”,如媒体素材、Java 代码、XML 标记、编译构建脚本、文档等。这些项目是 IntelliJ 思想的最高组织级别,它们定义了项目范围的设置、模块和库的集合,以及对项目中用于创建应用的各种资源(文件)的引用。正如您所看到的,这个 IntelliJ 项目实际上把所有东西都绑定在了一个项目文件中,这当然是 IDE 生成应用所必需的!

IntelliJ 项目文件格式:文件、文件夹和配置

IntelliJ IDEA 将使用纯文本 XML 文件格式存储项目的配置数据及其组成部分。这将使您更容易管理,因为 XML 是一种相对简单的编辑或调试格式,如果需要,您还可以使用这种 XML 数据格式更容易地与他人共享项目配置数据。IntelliJ 开发人员可以使用两种类型的配置数据格式来存储您的 Android Studio 可穿戴设备应用项目配置数据。这些格式包括基于目录和基于文件的格式。

IntelliJ IDEA 基于目录的数据格式

当一个基于目录的数据格式 被用于 IntelliJ IDEA 项目时,你会发现**。IntelliJ 项目文件夹结构中的 idea** 目录。这个。idea 子目录将包含上一节提到的 XML 配置文件的集合。

这些 XML 文件中的每一个都只包含整个项目配置数据的逻辑部分。文件名反映了 IntelliJ IDEA 项目中的功能区域。这样,使用这种逻辑文件命名方法,您要找的东西将很容易找到。

例如,您可能会看到包含与项目编译方式相关的 xml 标记的 compiler.xml 文件,与项目实现编码方式相关的 encodings.xml 文件,或者包含 Android Studio 应用项目所需模块的 modules.xml 文件。

几乎所有这些文件都包含对项目本身至关重要的信息。这将包括文件名和所需组件模块和库的位置,或者可能是编译器设置或其他 IDEA 配置设置。这些文件可以(也应该)保持在版本控制之下,就像项目中的所有其他文件一样。

然而,这种文件命名方法有一个例外,它被命名为 workspace.xml 。这个 XML 文件将包含您所有的首选项设置,例如意见编辑窗格的位置和各种编辑器 UI 窗口的位置。该文件还包含您的 VCS(版本控制系统)和历史设置。

此工作区文件还可以包含与 IntelliJ IDEA 集成开发环境相关的任何其他数据。因此,您可能不希望公开共享这个文件,除非您希望人们模仿您的 IDE!

基于 IntelliJ IDEA 文件的数据格式

还有一种基于文件的配置格式 ,当您希望在一个项目目录中只放置两个配置文件时,应该与 IntelliJ 一起使用。其中一个文件以一个为特色。ipr 扩展名,代表 IntelliJ 项目。该文件将存储主要 IntelliJ IDEA 项目的配置信息。

其他更次要的文件将使用一个**。iws** 扩展名,代表 IntelliJ 工作区,这个文件存储了你的个人工作区设置。这个。iws 文件不应置于版本控制之下,而您的。如果您使用版本控制,ipr 文件可以(也应该)被置于版本控制之下。

基于文件的配置文件格式还可以转换为基于目录的配置文件格式(更多信息,请参见 JetBrains 网站上的“将项目转换为基于目录的格式”)。

IntelliJ 特性 : SDK、语言支持和自动编码

要开发任何类型的应用,您总是需要使用软件开发工具包(SDK)。与 Android Studio 相关的一个例子是 Android SDK,它运行在 Java 7 软件开发工具包之上,Oracle 称之为 JDK。

IntelliJ IDEA 本身不包含任何 SDK 然而,这个 Android Studio 1.x 捆绑的 IntelliJ IDEA 和 Android SDK 是基于 Java 7 JDK 的,如你所知,来自第二章第一章。通常,在您开始编写任何应用代码之前,您必须下载并安装一个受支持的 SDK,然后配置它以便在 IntelliJ IDEA 中使用。

您可以在首次创建应用项目时指定 SDK,甚至可以在以后指定 SDK。要在 IntelliJ IDEA 中定义 SDK,您需要做的是指定 SDK 的名称及其位置。

硬盘驱动器上的位置是磁盘字母和目录路径,通常称为 SDK 的“主”目录,类似于 Java 使用的术语。这将是你安装 SDK 的目录,由于你已经在第二章中安装了 Java 7 JDK,你可能记得对于 Java 来说是C:/program files/Java/JDK 1 . 7 . 0 _ 71

让我们来看看 IntelliJ 思想可以支持(使用)的一些流行的开发环境,以防您计划在 Flash(使用 Flex 或 AIR)以及 Java SE 或 Java ME 中开发应用,当然,使用 Android Studio 1 . 0 . 2(Android 5 . 0 . 2)。也有允许其他开发平台的第三方插件。

IntelliJ 支持的流行 SDK:Android、Java 和 Flash

IntelliJ IDEA 使用的一些最广泛的软件开发平台包括开源的 Java 8 SE、Java 8 ME、Java 7 SE 和 Android Studio,以及 Adobe 的付费软件 Flash,这些软件目前在许多嵌入式设备(智能手机、平板电脑、智能手表、智能眼镜、iTV 电视机、游戏控制台、机顶盒、电子书阅读器、家庭媒体中心)上并不真正受支持,因为 Flash 是非常数据密集型的,而且制造商实施起来也很昂贵(它不是开源的)。

Java 7 或 8 SDK (JDK)涵盖了 Java 桌面(Java SE)和企业(Java EE)应用,以及 Java mobile (Java ME)或 Java Embedded (Java SE Embedded 和 Java ME Embedded)应用的开发。JavaFX 现在也是 Java 7 和 Java 8 的一部分,所以它包含在 Java 的所有版本中。如果你感兴趣的话,我写了【Java 8 游戏开发入门(2014 年出版)来讨论这个话题。

Android SDK,一旦使用 Android Studio 1.x 捆绑包与 IntelliJ 预集成,就用于为 Android 5 和更早的设备开发应用(使用前面讨论的 Android 支持 API 向后兼容库)。

也有 Adobe Flex 和 Adobe AIR SDKs 用于为 Adobe Flash 平台开发应用,到目前为止,Adobe Flash 平台的受欢迎程度已经下降了十年。由于免费用于商业用途,开源平台的使用量激增,从苹果、Adobe 和 MS Windows 等付费平台夺走了市场份额,因为媒体开发商的零成本功能水平相似。这就是为什么你会看到这么多基于 HTML5 和 Android 的设备。

还支持 Flexmojos SDK,它将启动 Adobe Flex 编译器和调试器。需要注意的是,当 Flexmojos 项目打开时,IntelliJ IDEA 会自动创建这个 SDK。

最后,还有“本地”IntelliJ IDEA 平台插件 SDK,用于为 IntelliJ IDEA 开发定制的插件。IntelliJ IDEA 安装本身将充当 IntelliJ IDEA 平台插件 SDK。

IntelliJ 支持的流行语言:Java 8、XML 和 Groovy

现代软件应用的开发目前涉及在一个单一的开发基础设施中使用几种(不相关的)编程语言。这描述了一个叫做多语言编程环境的开发环境。Android Studio 1.x 就是一个很好的例子,因为它使用 Java 7 进行编码,使用 XML 标记进行快速对象定义。

作为一名专业的 Android 开发人员,您知道这些对象后来被“膨胀”, XML 标记结构被转换成 Java 对象。IntelliJ IDEA 是多语言编程的专业 IDE,这也是 Google 在 Android Studio 1.x 和 Android 5(以及更早版本)开发中采用它的原因。

IntelliJ IDEA 的这个免费版本支持的主要编程语言包括 Java 8(和 lambda expression)以及早期的 Java 支持,包括与 Android Studio 一起使用的 Java 7(没有 lambda expression 支持),以及 XML 和 XSL。XML 广泛用于 Android 应用开发,因此 IntelliJ 非常适合 Android 5。IntelliJ 还支持 Groovy ,这通常不用于 Android 应用开发,但是正如您可能想象的那样,Groovy 群体已经找到了一种方法来使 Android 的 Groovy 开发成为现实,所以如果您使用 Groovy,那么您很幸运,所有支持的 IntelliJ 语言都可以一起工作!Android Studio 中的 Gradle 构建系统使用 Groovy 语法。

IntelliJ IDEA 的“终极”版本支持大量高级语言,如 Java Server Pages (JSP 和 JSPX)、Flex、ActionScript、HTML5、CSS3、JavaScript、SQL、PHP、Spring 和许多其他语言。

最终成本大约是 500 美元购买(第一次)或 300 美元升级。创业公司有 50%的折扣,学生和教师也有免费版本。符合开源软件定义以及 IntelliJ 许可和升级(“购买”页面)网页上定义的一组附加标准的非商业操作系统软件项目可以获得免费的开源许可证。也有用于教育和培训目的的免费版本,所以事实证明 JetBrains 是一家相当慷慨的公司!

IntelliJ 自动编码功能:突出显示、格式化和折叠

像 NetBeans (JavaFX,HTML5)或 Eclipse (Java) IDE 软件包一样,IntelliJ IDE 具有许多高级功能,就像文字处理器具有的编写功能一样,只有这些功能用于辅助代码编程。

IntelliJ 代码突出显示、文件模板、代码完成和代码生成

最明显的特点是根据使用情况用不同的颜色突出显示 ,这是文字处理器不会对你的文字做的。语法和错误突出显示在所有的 ide 中都很常见,但是 IntelliJ 看起来是所有 ide 中最专业的,因为它是免费版本的最终(或付费)版本。尽管 IntelliJ IDEA 中使用的默认颜色是行业标准颜色,但如果愿意,您也可以更改代码颜色值。

代码高亮颜色可以在设置对话框的颜色和字体部分中配置,您可以在图 4-5 的右侧看到,从上往下数第二个,您可能已经研究过了,正如我之前建议您做的那样。

还有另一个很酷的特性叫做“文件模板”,它允许 IntelliJ 为 IDE 支持的语言创建我称之为引导 ,或者部分编码(这些也被称为存根 )。这使得 IntelliJ 能够创建“空”的类和方法,例如 Java 7 或 XML 1.0 标记。

所有 IDE 软件中都有另一个流行的特性,叫做代码 完成 ,它会查看您正在编写的代码的上下文,并为您完成部分代码。还有代码生成,它与文件模板的功能密切相关,提供了您的引导代码“片段”,您可以根据需要进行修改。

IntelliJ 代码格式化、代码折叠、搜索和替换、宏和文档

IntelliJ IDEA 不仅为您编写代码并为代码着色,以使事情变得更容易,它还以其他酷的方式格式化、隐藏(和显示)和自动化您的编程。

帮助你组织和更好地了解程序逻辑的特性之一叫做代码折叠 。代码折叠通常会在主要代码块的左侧使用加号(+)或减号(-)图标,例如 Java 7 中的类和方法,以允许您“折叠”这些程序结构,这样您就可以在屏幕上有更多的空间来处理其他代码结构,或者鸟瞰您正在处理的 Java 类的代码结构。

如您所料,IntelliJ 允许您快速访问 Android API 文档,以便您可以快速轻松地研究常量、接口、方法或类。Android 5 API 已经变得如此庞大,以至于这个功能成为你可穿戴应用开发的重要补充。

随着代码变得越来越复杂,另一个变得越来越有价值的自动化特性包括在编辑窗格中使用宏。宏是自动化的工作过程,可以追溯到早期的大型机计算、DOS 和批处理。

还有其他一些有用的功能,比如可以打开控制台窗口,这样就可以在不脱离 IntelliJ 思想的情况下交互式地执行命令。

除了代码编辑辅助功能,IntelliJ IDEA 还支持调试 Java、JavaScript、PHP 和 Adobe Flash (Flex)应用。目前,Mozilla Firefox 和 Google Chrome 浏览器都支持 JavaScript 相关应用的调试。现在,让我们创建一个可穿戴应用!

创建 Android 可穿戴应用 :使用 IntelliJ

现在是使用快速启动快捷方式启动 Android Studio 的时候了,这次不是点击配置或文档和操作选项,而是点击启动一个新的 Android Studio 项目选项,如图 4-16 中的选择。

9781430265504_Fig04-16.jpg

图 4-16 。选择开始一个新的 Android Studio 项目;将你的应用命名为 ProAndroidWearable

将您的应用命名为 ProAndroidWearable 并将【wearables.android.pro.com 设置为您的域,然后单击下一步按钮。在接下来的对话框中,如图图 4-17 所示,从下拉列表中选择Android 4.3 Jelly Bean API Level 18,然后勾选磨损复选框选项。保持选中电话和平板电脑复选框选项(因为这是默认的应用开发选项)。

9781430265504_Fig04-17.jpg

图 4-17 。选择 API 18、穿戴、手机和平板电脑

一旦你点击下一个按钮,你将被带到一个添加一个活动到移动对话框,如图图 4-18 所示。选择 Add No Activity 选项,显示在该对话框的左上角,以便不为上一对话框的电话或平板电脑选项部分创建活动。

9781430265504_Fig04-18.jpg

图 4-18 。在“向手机添加活动”对话框中选择“不添加活动”选项(适用于手机和平板电脑选项)

一旦你点击下一个按钮,你将得到第四个对话框,添加一个活动佩戴对话框,在这里你将选择你的空白佩戴活动选项,正如你在图 4-19 中看到的,显示了圆形和方形 Android Wear 智能手表屏幕(活动)配置。选择空白穿戴活动后,点击下一个按钮,您可以为穿戴式应用命名主活动,并让 IntelliJ 在下一个对话框中设置(生成代码)引导 XML 文件。

9781430265504_Fig04-19.jpg

图 4-19 。在“添加要穿戴的活动”对话框中选择“空白穿戴活动”选项,然后单击“下一步”按钮

为您的新文件选择选项对话框中,可以在图 4-20 中看到,接受 Android Studio 建议的 Android 5 Java 和 XML 文件命名约定,并将您的主 Java 引导MainActivity.java和主 XML 用户界面布局容器文件 activity_main.xml 命名。Wear UI 布局容器 XML 文件分别以 round_ 和 square_ 作为文件名的前缀,这对我来说似乎合乎逻辑。

9781430265504_Fig04-20.jpg

图 4-20 。在“为新文件选择选项”对话框中,接受标准的 Java 和 XML 文件名约定

点击完成按钮后,会出现一个 Windows 安全警告对话框,如图 4-21 左侧所示。点击允许访问按钮,这样 Android Studio 就可以继续启动,用 Gradle 构建一个项目,如图图 4-21 右侧的构建对话框所示。

9781430265504_Fig04-21.jpg

图 4-21 。单击“Windows 安全警报”对话框中的“允许访问”按钮,解除对 Windows 防火墙的阻止

一旦 Android Studio (IntelliJ IDEA)启动你的引导程序项目,你会看到日积月累对话框,也可以使用文档和操作image日积月累面板序列来访问,如图图 4-22 所示。

9781430265504_Fig04-22.jpg

图 4-22 。IntelliJ 启动后,日积月累对话框将会打开

你可以点击下一个提示按钮,在图 4-22 中以蓝色显示,或者你可以点击它左边的上一个提示按钮向后循环提示队列,如果你是一个不墨守成规的人,阅读所有这些关于 IntelliJ IDEA 的热门提示,我强烈推荐。

完成日积月累后,点击下一个提示按钮右侧的关闭按钮,关闭日积月累对话框。然后全屏打开 Android Studio IntelliJ IDEA,这样您就可以接下来查看它,因为它第一次在其中打开了您的 Pro Android 可穿戴设备项目!这种实际使用越来越令人兴奋!

正如你在图 4-23 中看到的,左边有一个项目窗格,里面有你的 ProAndroidWearable 项目结构。中间的编辑器窗格目前有两个选项卡,一个用于 Android 5 中使用的 Java 7 代码,接下来您将看到,另一个用于 XML 用户界面布局标记,这是任何 IDEA 启动时打开的默认选项卡。

9781430265504_Fig04-23.jpg

图 4-23 。一旦你完成了项目创建过程,新项目将会打开

XML 选项卡有一个设计模式,默认情况下在启动时显示,并在编辑窗格的左下方使用一个标有“design”的蓝色选项卡来指示在它的右边有一个标记为“text”的白色标签,您将使用它来手工编写 XML 标记(从头开始),因为这是一个 Pro Android 标题!design 选项卡有一个呈现引擎,用于显示 XML 标记在 Android 硬件设备上的外观。这不如 AVD 仿真器精确,您将在第五章中设置 AVD 仿真器,在那里您将学习如何创建和配置仿真器。

IntelliJ 中的设计编辑器提供了一个拖放式用户界面,用于添加 UI 小部件和设置它们的属性(如果您喜欢这些术语,可以称之为属性或参数)。这些小部件在左侧的面板窗格中,可以拖动到智能手机预览界面,将它们添加到设计中。

当一个给定的 UI 小部件被选中进行编辑时,每个小部件的属性显示在图 4-23 的右下角。该窗格名为属性 ,将包含所选用户界面小部件支持的任何属性(或参数,也称为属性)以供进一步定制。

还有组件树窗格,在图 4-23 中 XML 编辑区的右上方,显示了当前正在使用的 widget 组件,比如那些已经添加到当前设计预览中的 UI widgets。

这个窗格给你一个鸟瞰图,本质上是顶级的 UI 设计层次结构。这是为复杂的 UI 设计层次结构使用而提供的,就像 Java 编辑窗格中提供的代码折叠一样,以便在代码变得更复杂时使事情变得更容易。

接下来,单击 XML 编辑器窗格左下方的文本选项卡,使其变为蓝色,并向您显示创建预览的 XML 标记结构,您会在中注意到,图 4-24 现在显示在 XML 编辑区域的右侧,而不是中间。

9781430265504_Fig04-24.jpg

图 4-24 。单击底部的文本选项卡,展开工程窗格文件树,并选择加入或退出使用统计

接下来,使用 IntelliJ 左侧项目窗格中的向右箭头图标打开该窗格中所有已关闭的文件夹。您的项目已经有了一个 Java 文件、四个 PNG 图像素材、三个 XML 布局文件、一个包含字符串值的 XML 文件和六个 Gradle 脚本,它们用于“构建”您的可穿戴设备应用。

当我在第七章谈到 Java 代码和 XML 标记时,你将开始了解关于这个 Java 代码(和 XML 标记)正在做什么的细节。

接下来,单击 IntelliJ IDEA 中间编辑窗格左上角的 MainActivity.java 选项卡,查看使用新的 Android 项目系列对话框为您创建的 Java 代码。

让我们来看看 Android Studio 为您创建的 bootstrap Java 代码,看看它是从哪里获得的。您的第一个 Java 包语句来自右侧的图 4-16 所示的对话框,它将您的公司目录字段与您的应用名称字段连接起来,以创建以下 Java 包语句:

package com.pro.android.wearables.proandroidwearable;

然后是导入语句。这些导入了四个 Android 类: BundleActivityTextViewWatchViewStub 。这些是创建活动对象、保存应用状态和创建 UI 小部件(视图对象)所需要的。这四个初始导入语句的 Java 代码(随着您添加更多的小部件和函数,将会添加更多)如下所示:

import android.app.Activity;
import android.os.Bundle;
import android.support.wearable.view.WatchViewStub;
import android.widget.TextView;

生成的 Java 代码的重要部分是 MainActivity 类,它是 Android Activity 类的子类。你知道这是类层次的方法是因为它是通过 Java extends 关键字的使用来表示的:

public class MainActivity extends Activity {
    private TextView mTextView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
        stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
            @Override
            public void onLayoutInflated(WatchViewStub stub) {
                mTextView = (TextView) stub.findViewById(R.id.text);
            }
        });
    }
}

让我们来看看这个 Java 代码体的内部是什么,如图 4-25 所示。我将在这里介绍这一点,这样您就知道这些 Java 类和您的文件中的 XML 标记之间的相互联系了。第一行代码声明了一个名为 mTextView 的 TextView 小部件,因此现在使用了一半的 import 语句,因为 Activity import 用于 MainActivity 子类,TextView import 用于这个 TextView 小部件。

9781430265504_Fig04-25.jpg

图 4-25 。单击顶部的 MainActivity.java 选项卡,展开项目窗格文件树,并选择加入或退出使用统计数据

作为一名专业的 Android 开发人员,您可能知道,您必须始终为您为 Android 应用创建的活动@Override 一个 onCreate( ) 方法 。如果你需要回顾 Android 开发,我刚刚在 2014 年第三季度为绝对初学者写了第三版 Android 应用 (Apress),非常详细地涵盖了所有内容。这个方法调用使用您导入的 Bundle class 来创建状态内存(内存中与活动实例相关的所有状态或设置)Bundle,它被恰当地命名为 savedInstanceState 。如果 Android 因为任何原因不得不将您的活动从内存中交换出来,这个小 Bundle 对象将允许 Android OS 完全按照用户离开时的样子重建您的活动,因此用户甚至不知道该活动已经暂时从系统内存中删除。

你在里面看到的第一样东西。onCreate()方法的结构是super.onCreate(savedInstanceState);语句。这将通过使用父 Activity 类来创建(或者使用 Bundle 对象重新创建,如果 Android 已经从内存中删除了该活动的话)Activity 对象。onCreate()方法,使用 Java super 关键字从父 Activity 类调用该方法。

下一个代码语句是每个 Android 应用必须设置用户界面布局容器的语句。这是您的 setContentView()方法 调用,它引用了 activity_main.xml 文件,您之前在 activity_main.xml 选项卡中看到了该文件。这就是 XML UI 定义如何连接到可穿戴应用的 Java 7 代码。

下一行代码是使用第四个 WatchViewStub import 语句将可穿戴应用的 Android 应用部分连接到可穿戴应用本身,因此现在您已经使用了所有导入的类。您创建一个名为 stub 的 WatchViewStub 对象,并通过使用 findViewById( ) 方法 调用,用已经在 activity_main.xml 文件中定义的 watch_view_stub UI 小部件加载它。

接下来,使用一个. setOnLayoutInflatedListener()方法 将一个侦听器附加到名为 Stub 的 WatchViewStub 对象。在 watch_view_stub XML 布局定义膨胀后,该方法内的代码将被触发

这个构造将确保可穿戴设备 UI 定义在。onLayoutInflated()方法 结构被执行。注意这里面。setOnLayoutInflatedListener()方法,一个新的。onLayoutInflatedListener()对象是在参数区创建的。

这个。onLayoutStubListener()方法 通过使用包含该方法的 WatchViewStub 类的路径引用来调用。这是非常密集的 Java 代码,它设置了您的整个侦听器结构,以及在 UI 布局膨胀后它将要做什么。这些都是只用了六行 Java 代码就完成的。

在 onLayoutInflated()方法中,将使用 ID 为 text 的 TextView UI 小部件的 XML 定义来加载 mTextView TextView 对象。如您所见,没有 TextView 小部件或任何其他 ID 为 text 的小部件,因此您需要打开其他 XML UI 布局容器文件之一。这是通过右键单击项目窗格中的 rect_activity_main.xml 文件名并选择跳转到源代码菜单项来完成的,这在 IntelliJ 行话中的意思是“在中央编辑区域的选项卡中打开文件”

正如你在图 4-26 的 rect_activity_main.xml 选项卡中看到的,有一个名为 @+id/text 的 TextView 小部件,这是 Java 代码在。使用 findViewById()的 onLayoutInflated()方法结构。

9781430265504_Fig04-26.jpg

图 4-26 。右键单击 rect_activity_main.xml 文件,选择跳转到源菜单选项以在选项卡中打开

如果您想查看 rect_activity_main.xml 选项卡中的 UI 定义是如何在 activity_main.xml UI 定义中引用的,如图 4-24 中的所示,请查看第 7 行。如果您想在 IntelliJ 中打开行号,右键单击 XML 标记窗格左侧的灰色列,并选择显示行号选项。第 7 行类似于下面的标记:

app:rectLayout="@layout/rect_activity_main" app:roundLayout="@layout/round_activity_main"

这两个应用:对 rectLayout 和 roundLayout 属性的引用是 Android Wear 查看的属性,以确定将哪个 UI 设计用于矩形(方形)或圆形的智能手表。

现在你已经知道了在 bootstrap 项目中所有的东西是如何连接在一起的,接下来你需要做的就是确保你的 AVD 仿真器已经就位,并准备好用于本书的其余部分。恭喜你!你进步很大。

摘要

在本章中,您了解了 IntelliJ IDEA 的所有内容,以及 Android Studio 如何将他们的 Android 5 SDK 和 Java JDK 结合起来,将其变成一个定制的 Pro Android 可穿戴设备应用集成开发环境软件工具。

您还学习了如何使用 SDK 管理器来查看安装了哪些 SDK,以及安装本书中需要的其他功能。你知道了鲜为人知的以管理员身份运行的技巧,除了你试图将 Android Studio 1.0.1 更新到 Android Studio 1.0.2 时遇到的情况之外,它还可以解决许多其他失败的安装场景。幸运的是,有一个更新可用,所以我可以向您展示这个小技巧,让您在整个操作系统板的读或写权限。

您已经了解了 IntelliJ IDEA 版本 14 的所有内容:如何更新它,如何了解它的特性,以及它的项目结构、文件、文件夹层次结构和配置文件。您了解了 SDKs IntelliJ 将支持什么,以及什么版本的 IntelliJ(免费与付费)支持哪些编程语言。您了解了无数的编程特性,这些特性将使您的编码工作变得更加容易。

最后,您创建了自己的 ProAndroidWearable 应用,这样您就可以探索智能 IDE 了。您了解了 Java 7 和 XML 标记,并了解了 Java 代码的作用以及它是如何链接到(连接到)XML 标记 UI 定义文件的。

在关于 AVD 的下一章中,您将确切地了解如何为定制的可穿戴设备设置 Android AVD 仿真器,并获得一些关于 AVD 创建、配置、设置和定制的经验。

五、Android 虚拟设备:设置可穿戴设备应用模拟器

现在你已经对 Android Studio 的特性有了一个大概的了解,本章将讨论 Android 虚拟设备(AVD),它是一个软件模拟器。

这些之所以重要,是因为它们允许你更快地测试你的 Pro Android 可穿戴设备应用,而不必在每次你想测试应用的 Java 代码或 XML 标记时,通过 USB 电缆将你的 APK 文件传输到硬件设备(尽管你确实在第四章中安装了最新的 USB 驱动程序,以防你想这样做)。

让我们首先为方形和圆形佩戴硬件(智能手表外设)创建 avd。您将为基于英特尔 x86 的智能手表和基于 ARM EABI7 的智能手表执行此操作。这是可能的,因为 x86 和 ARM 系统映像是您在更新到 Android OS 5.0.2 时使用 SDK 管理器在第四章中安装的。

之后,你将在本章的剩余部分学习你的 AVDs 如何与 IntelliJ IDEA 中的 Android 5 可穿戴设备应用开发项目的其余部分进行接口。您将了解如何在开发过程中的任何给定时间选择使用哪个 AVD 仿真器来测试您的应用。这对于 Wear 应用开发非常重要,因为您将需要创建方形和圆形版本的 UI 设计,正如在第四章中详细讨论的那样,当您了解到 WatchViewStub 对象如何允许 Android 操作系统检测和提供针对用户智能手表形状的正确 UI 设计时。

使用 AVD 管理器:创建磨损模拟器

如果您还没有这样做,请使用您在第二章中创建的快速启动图标启动 Android Studio 开发环境。这将启动 IntelliJ IDEA 并显示你在第四章中创建的 ProAndroidWearable 项目。点击 IDE 顶部的工具菜单,如图图 5-1 所示,点击 Android 菜单,显示带有 AVD 管理器选项的子菜单。还要注意,AVD 管理器下面是 SDK 管理器选项,所以如果您想知道如何在项目模式下进入 IntelliJ 后访问 SDK 对话框,这是您将如何完成的。

9781430265504_Fig05-01.jpg

图 5-1 。使用 IntelliJ 中的工具image Android image AVD 管理器菜单序列并启动 AVD 管理器

这将打开 AVD 管理器对话框和一个当前安装的 AVD 仿真器列表,称为你的虚拟设备屏幕,如图图 5-2 所示。

9781430265504_Fig05-02.jpg

图 5-2 。使用 AVD 管理器对话框左下角的创建虚拟设备按钮创建 AVD

该对话框列出了当前安装在 IntelliJ IDEA 中的基本 avd 和默认软件安装,包括摩托罗拉的 Android 5 操作系统兼容的 Nexus 5 API Level 21,用于英特尔凌动 x86 处理器仿真。对于那些没有听到行业新闻的人来说,谷歌几年前收购了摩托罗拉。

在对话框的左下方,有一个标记为“创建虚拟设备”的按钮。点按此按钮可调出第二级 AVD 创建。

AVD 管理器中的第二级对话框用于选择虚拟设备配置对话框中的硬件,如图 5-3 中的所示。它列出了所有当前预定义的手机平板电脑佩戴、电视硬件,并通过对话框左侧的类别按钮对其进行分类和组织。正如您在图 5-3 中看到的,“真正的智能手表”并不是智能手表的外设,而是被列在手机部分,因为它们可以作为一部手机绑在您的手腕上。我在图 5-3 中高亮显示了 Neptune Pine 智能手表,这样你就可以看到属性是如何列在右边的。

9781430265504_Fig05-03.jpg

图 5-3 。请注意,Neptune Pine 智能手表是一款完整的 Android(手机)设备,不在 Android Wear 之下

点击对话框左侧的 Wear 按钮,查看 IntelliJ IDEA 中列出了哪些内置的 Android Wear 设备选项。

Android Wear Square 有预定义的智能手表仿真器,Android Wear Round 也有,如图图 5-4 所示。让我们首先为英特尔凌动(x86)处理器创建 Android Wear Round AVD 仿真器。

9781430265504_Fig05-04.jpg

图 5-4 。选择 Android Wear Round 硬件仿真器,然后单击蓝色的“下一步”按钮来定义它的使用

选择 Android Wear Round 条目,在图 5-4 中以蓝色显示选中,然后点击蓝色下一步按钮。这将带你进入第三层,进入系统映像对话框,如图 5-5 所示。请注意,该对话框中列出了两种不同的硬件版本,ARM 和 Intel 处理器。您将为这两种类型的穿戴硬件创建仿真器,因为有些智能手表产品基于 ARM,有些基于 Intel。选择 Lollipop x86 API Level 21 选项,然后单击下一步进入系列中的下一个对话框,在这里您可以为英特尔凌动 x86 Android Wear Round 智能手表 AVD 仿真器定义仿真器选项。

9781430265504_Fig05-05.jpg

图 5-5 。为 Android Wear 选择一个英特尔 x86 Lollipop 系统映像,该映像是使用 SDK 管理器安装的

对话框系列中的第四层是验证配置对话框,如图 5-6 中的所示。您将在仿真性能部分看到两个复选框,一个用于 GPU 仿真,另一个用于存储最后一个仿真器状态的内存快照,用于更快地加载仿真器。我假设你接受了我在第二章中的建议,并且有一个 SSD 硬盘,所以使用 主机 GPU 选项更值得选择,因为它允许 3D OpenGL 被模拟。需要注意的是,这两个复选框不能同时选中。你将不得不在这两个重要的模拟器津贴之间做出选择,所以要小心选择!

9781430265504_Fig05-06.jpg

图 5-6 。选择使用主机 GPU 以使仿真器图形能够在工作站的图形适配器上运行,然后单击完成

一旦你点击完成按钮,如图 5-6 右下方所示,你将被带到你的 虚拟设备对话框,如图 5-7 所示。

9781430265504_Fig05-07.jpg

图 5-7 。一旦您单击完成,Android Wear Round API 21 x86 AVD 将在虚拟设备中列出

再次点击对话框左下方的创建虚拟设备按钮,如图图 5-7 所示,接下来我们创建一个 Android Wear Square API 21 AVD。在选择硬件对话框中,如图图 5-8 所示,这次选择 Android Wear Square 设备,如蓝色选中所示。请再次注意,右侧列出了有关该 AVD 仿真器规格的信息,在本例中为尺寸、比率、 HDPI 密度和 280 DP

9781430265504_Fig05-08.jpg

图 5-8 。选择 Android Wear Square 硬件模拟器,然后单击下一步按钮定义它以供使用

点击蓝色下一个按钮,将打开系统镜像对话框,如图图 5-9 所示。再次选择一个 Lollipop API Level 21 x86 系统镜像。

9781430265504_Fig05-09.jpg

图 5-9 。为 Android Wear 选择一个英特尔 x86 Lollipop 系统映像,它是通过 SDK 管理器安装的

点击蓝色下一个按钮,进入验证配置对话框,如图图 5-10 所示。我再次使用使用 主机 GPU 选项,因为我有一个高级 3D 显卡,我是一个 3D 建模师和动画师,我计划最终在我的 Android 应用中使用 OpenGL。值得注意的是,许多对话框在升级过程中“滞后”了一个版本。因此,即使你在第四章中确保你是 5.0.2“干净的”,诸如更新对话框文本反馈信息的细节,例如,现在是 Android 5.0.2 x86 的 Android 5.0.1 x86,并没有进入当前正在使用的对话框 UI 标签的更新!

9781430265504_Fig05-10.jpg

图 5-10 。选择使用主机 GPU 以使仿真器图形能够在工作站的图形适配器上运行

点击完成,返回虚拟设备对话框,如图图 5-11 所示。

9781430265504_Fig05-11.jpg

图 5-11 。用于圆形和方形智能手表的英特尔凌动 Android Wear AVD 仿真器已经问世

我建议使用与基于英特尔凌动的智能手表完全相同的工作流程,这也可以在图 5-4 到 5-11 中看到,并创建使用 ARM 处理器技术的 AVD 仿真器。如果你这样做了,当你需要它们进行 Android Wear Round 和 Android Wear Square 测试时,你将拥有所有四个仿真器。在本书中,我将遵循“第一次就做对”的工作流程,所以当你在那个对话框中时,做好你需要的一切。

图 5-12 显示了你的虚拟设备对话框,在这四个 Android Wear AVD 模拟器都被创建之后。

9781430265504_Fig05-12.jpg

图 5-12 。适用于圆形或方形智能手表的英特尔凌动或 ARM Android Wear AVD 仿真器,随时可用

现在,您已经有了为 Android Studio IntelliJ IDEA 创建 ARM 和英特尔 AVD 仿真器的一些实践,您将为测试您的 Pro Android 可穿戴应用做好准备。

接下来,让我们看看如何使用这些 AVD 仿真器来测试您在第四章中创建的 ProAndroidWearable 应用。

使用穿戴模拟器:测试你的可穿戴应用

Android Studio IntelliJ IDEA 中的仿真器设置是通过运行/调试配置对话框访问的,当您更新和探索 Android 5 的 IntelliJ 高级集成开发环境时,您可能已经仔细阅读过第四章中的配置对话框。

正如你在图 5-13 中所看到的,这也可以从你的项目内部访问,通过使用一个运行image编辑配置菜单序列,它以蓝色突出显示。单击 IntelliJ IDEA 顶部的运行菜单,并选择编辑配置菜单项以打开对话框。

9781430265504_Fig05-13.jpg

图 5-13 。使用运行image编辑配置菜单序列来设置您想要使用的 AVD 仿真器

在图 5-14 中可以看到,主要有三个选项卡:通用LogCat仿真器。在这里,您将看到如何使用 LogCat (日志编目),因为您开始产生需要在本书的过程中纠正的错误。LogCat 是你在开发工作过程中真正需要考虑的东西,这就是为什么我没有在第四章中讨论 LogCat 的功能。

你可能认为仿真器选项卡是你需要设置 AVD 仿真器的地方,然而,事实上在常规选项卡的底部有一个目标设备 部分,在那里设置该功能用于 IntelliJ。

正如你在底部的图 5-14 中看到的,在 IntelliJ 中有几个选项可以设置用于测试你的可穿戴设备应用的目标设备。从使用仿真器 AVD 到使用你在第四章中更新的 USB 驱动程序,再到指示 IntelliJ 就使用哪个设备(仿真器或真实硬件)来测试你的 Android Wear 应用的 Java 代码和 XML 标记进行投票。

9781430265504_Fig05-14.jpg

图 5-14 。在常规选项卡中,选择模拟器目标设备单选按钮,并设置下拉选择器

如果您想手动选择目标设备,每次使用跑步或跑步佩戴图标或菜单序列时,您都需要选择位于显示选择器对话框选项旁边的单选按钮。每次你用这个配置设置在 IntelliJ 中开始运行磨损或调试操作时,Android Studio IntelliJ IDEA 都会为你显示一个选择设备对话框。

如果选择 USB 设备选项,IntelliJ 将在应用启动时检测插入的 USB 设备,然后用于测试目的。如果你有一个智能手表,这将是你的最佳选择!

因为我不能假设所有的读者都将拥有一个 Wear 智能手表,所以在本书的过程中,我将主要使用 Android Wear Square 和 Android Wear Round AVD 模拟器来测试可穿戴设备应用。这就引出了第三个仿真器选项。

如果您选择第三个仿真器单选按钮,您将能够从下拉菜单中选择首选 Android 虚拟设备设置。这是用您在本章前面创建的 AVD 仿真器填充的。

我将首先选择 Android Wear Round API 21 (英特尔凌动),您接下来将测试它,以确保它能够正常工作。在本章中,您还将测试您的 ARM AVD 仿真器和 Android Wear Square AVD,以便了解它们作为硬件仿真器的外观和工作方式。

如果您打算更改 AVD 模拟器,并在 USB 驱动程序(外部硬件设备)和使用 AVD 模拟器之间来回切换,您将需要尝试使用显示选择器对话框单选按钮选项。这将允许你在每次点击运行图标(看起来像一个绿色视频播放器传输按钮)或使用运行image运行穿戴菜单序列来测试你的应用时,选择你想要如何测试可穿戴设备应用。

使用 IntelliJ Run:在 Round Wear 中运行可穿戴应用

让我们使用 Run image Run 菜单序列,执行名为 ProAndroidWearable 的 bootstrap 可穿戴应用,它是您在第四章中创建的。我得到一个错误,显示在截图左下方的图 5-15 中。我还在这张截图中显示了运行image运行菜单序列。正如你所看到的,我的系统,碰巧是 AMD FX-8350,似乎在运行英特尔 HAXM x86 仿真时遇到了问题。这可能是由于英特尔和 AMD 在 CPU 和 GPU 市场上的激烈竞争,因此,发生这种情况并不奇怪。

9781430265504_Fig05-15.jpg

图 5-15 。使用运行image运行菜单序列尝试并启动 AVD 注意输出中的错误(底部)

让我们来看看让英特尔 HAXM 正常工作的正确工作过程,以防 HAXM 错误信息发生在您身上!

安装英特尔硬件扩展管理器:intelhaxm.exe

打开操作系统文件管理工具,使用搜索栏,输入英特尔 axm 或【intelhaxm.exe 搜索词,如图 5-16 顶部红色突出显示的。这将为您找到intelhaxm-android.exe文件。

9781430265504_Fig05-16.jpg

图 5-16 。使用文件管理工具搜索 intelhaxm.exe 文件,然后右键单击该文件并选择以管理员身份运行

您实际上可以右键单击该文件(结果),如图 5-16(??)所示,并使用“以管理员身份运行”菜单选项在您的系统上安装英特尔硬件加速执行管理器 (HAXM) ,以消除您在 Android Studio IntelliJ IDEA 中遇到的 HAXM 错误。

在我的系统上,我在一个 VT 不支持对话框中收到了可怕的“此计算机不支持英特尔虚拟化技术”错误消息,如图 5-17 左侧所示。对我来说幸运的是,在这种情况下,我安装了所有的 AVD 类型,并且仍然可以在我的 Android 可穿戴应用开发中使用 ARM AVD。我可以继续写这本书!

9781430265504_Fig05-17.jpg

图 5-17 。如果你像我一样使用强大的 AMD 8 核 FX 处理器,你就要倒霉了!

一旦我点击 OK 按钮,如图 5-17 左侧所示,我收到这个“英特尔硬件加速执行管理器安装向导提前结束”对话框,如图 5-17 右侧所示,于是我点击完成

如果您没有看到图 5-17 中所示的对话框,请安装英特尔 HAXM,这应该可以解决您可能在 IntelliJ IDEA 的运行/调试/编译输出窗格和 IDEA 底部标签中得到的任何错误消息(这些显示在图 5-15 中的)。

切换 AVD:在圆形佩戴臂 AVD 中运行应用

因为我无法模拟这款英特尔凌动 Android Wear Round AVD,所以我回到运行/调试配置对话框,如图 5-18 中的所示,使用图 5-13 中的运行image编辑配置菜单。我从下拉列表中选择了 Android Wear Round API 21 2 选项。因为我在几分钟前刚刚创建了所有这些 avd,所以我知道这是 ARM 版本,所以我可以使用这个仿真器向您展示如何测试您的 ProAndroidWearable 应用。

9781430265504_Fig05-18.jpg

图 5-18 。选择您的 ARM Android Wear Round API 21 2 AVD(请注意,英特尔 AVD 现在以红色标记)

这次我将让您点击 IntelliJ 顶部的绿色播放(运行)图标 。正如你将在本章中看到的,有几种方法可以运行你的可穿戴设备应用。一旦你点击运行图标,你会看到在图 5-19 底部显示的输出窗格,它显示了大量与在 AVD 仿真器内运行你的应用相关的技术信息。最后一行写着“创建窗口”(包含仿真器),位于 30,30 (操作系统桌面的右上角),大小适合一个 320x320 圆形 AVD 仿真器。如果你想看一看这是什么样子,它显示在图 5-20 中,在我的系统上第一次启动!

9781430265504_Fig05-19.jpg

图 5-19 。点击顶部绿色的运行(播放)图标,运行 ARM 模拟器;请注意输出选项卡(底部)中的统计数据

当你第一次运行和启动 Android Wear AVDs 时,它完全模拟了你第一次运行任何智能手表产品时的体验。你将看到的屏幕序列可以在图 5-20 中看到,其中一个屏幕显示 Android Wear 应用不在你的手机上。

9781430265504_Fig05-20.jpg

图 5-20 。首次发射显示精确的磨损仿真;当你第一次打开智能手表时,它会显示这个

如果您使用鼠标将模拟器屏幕滑动到一侧,您将看到其他屏幕,建议您从谷歌 Play 商店安装 Android Wear 应用,以便 Wear 智能手表外围设备可以正常工作。需要注意的是,这不是必需的;这只是模拟器在试图模拟真实世界的 Android Wear 体验时异常准确。还要注意在图 5-20 的最右边,如果你没有用 AVD 仿真器做任何事情(一分钟后),也会显示一个项目 Volta 电源关闭(关闭)屏幕。

如果关闭 AVD 仿真器,单击红色 X 关闭窗口,并使用 IntelliJ 中的运行进程简单地重新启动它。我将向您展示另一种直接运行您的应用的方法,即使用右键单击上下文相关的基于菜单的工作流程。点击MainActivity.java标签,如图 5-21 中上部所示,然后在编辑窗格的右侧点击右键,选择运行‘主活动’菜单选项,再次启动您在运行image编辑配置运行/调试对话框中选择的 AVD。

9781430265504_Fig05-21.jpg

图 5-21 。从项目中启动 AVD 的另一种方法是在代码区域右键单击并选择 Run 'MainActivity '

第二次启动 AVD 时,你会看到一系列不同的 AVD 启动屏幕,这些屏幕会告诉你正在加载、针对穿戴设备优化、正在启动等应用的数量。你还会看到一个穿戴启动标志屏幕,以及一个智能手表屏幕,上面有云与充电的时间和指示器,以及“Ok Google”,如图图 5-22 所示。

9781430265504_Fig05-22.jpg

图 5-22 。AVD 优化和启动应用,显示 Android Wear 启动徽标,以及 Ok Google time 屏幕

一旦你获得了默认的 Android Wear 主屏幕(时间),你就可以在屏幕上滑动鼠标并下拉不同的手表表面,如图 5-23 的最左侧所示。也可以上下滑动;这将滚动不同的选项,如图 5-23 的的第二个窗格所示。

9781430265504_Fig05-23.jpg

图 5-23 。一旦模拟器启动,滑动屏幕找到开始按钮,然后滑动找到 ProAndroidWearable 应用

向下滚动并找到蓝色的开始选项,然后点击它进入应用屏幕,可以在图 5-23 的第三个窗格中看到。

您可以上下滚动启动应用屏幕,直到找到您的 ProAndroidWearable 应用,当您单击它时,它将启动。这将运行引导应用并显示 Hello Round World!消息。这个文本字符串对象包含在一个 TextView 小部件中,这个小部件可以在 activity_main.xml 文件中引用的 round_activity_main.xml 文件中找到。

我用浅蓝色突出显示了图 5-19 中的标记引用。我是通过在 XML 文件引用上单击鼠标光标来做到这一点的,所以在这个引用中寻找一个插入条。这是 Android 操作系统查看您正在使用的仿真器(或智能手表硬件)的地方,然后调用正确的 UI 布局设计 XML 定义文件,该文件将适合该类型的智能手表外观!作为开发人员,你将提前定义这一点,在本书的课程中,我将专注于智能手表的 UI 设计。

切换 AVD:在方形佩戴臂 AVD 中运行应用

进入 IntelliJ,使用运行image编辑配置工作流程,如图图 5-13 (此处不重复截图),选择Android Wear Square API 21 2(ARM,除非你的 Intel AVDs 在工作,你自己选择)。然后使用图 5-15 、图 5-19 或图 5-21 中所示的运行方法,这次在 Android Wear Square AVD 仿真器中运行可穿戴应用,以便您可以看到用户体验与 Android Wear Round AVD 仿真器相比如何。

请注意,每当您更改 Android 虚拟设备仿真器时,都会出现一个“等待 adb”进度条对话框,因为 IntelliJ IDEA 需要将新的 AVD 仿真器系统映像定义加载到系统内存中。这个进度条显示在图 5-24 中,如果您有一个带 SSD 硬盘的快速多核系统,它应该最多只显示几秒钟。

9781430265504_Fig05-24.jpg

图 5-24 。如果你在 IntelliJ 中切换到一个不同的 AVD 仿真器,你会得到等待 adb 进度条

在这个进度条消失之后,你的 Android Wear 方形模拟器会出现在和之前的 Android Wear 圆形模拟器相同的位置(你桌面的右上方)。正如你在图 5-25 中看到的,会出现一个稍等(加载)的屏幕,然后你会看到和你在 Android Wear Round 模拟器上看到的相同的连接屏幕。

9781430265504_Fig05-25.jpg

图 5-25 。当你第一次启动 AVD 时,它会模拟真正的智能手表会做什么

使用 Android Wear Round AVD 模拟器,如果你不使用模拟器,就像 Project Volta 与你的智能手表一样,如果你在启动后一分钟左右不使用它,你的 AVD 就会自动关闭。

出于这个原因,我建议在你的 Android Wear 模拟器中启动 ProAndroidWearable 应用后立即测试它!人们可能会认为,开发人员会急切地想看看他们的 Java 编程逻辑或 XML UI 设计是否工作正常,因此让 AVD 进入“省电”模式很少会成为问题。

一旦你的模拟器已经加载,你将得到一个“配对!”屏幕,模拟穿戴设备与智能手机或平板电脑的配对,如图 5-26 左侧所示。该屏幕消失后,您将看到一个您一切就绪!屏幕,告诉你向上滑动进入,显示在图 5-26 的右侧。

9781430265504_Fig05-26.jpg

图 5-26 。一旦你得到配对的屏幕,你就一切就绪了!屏幕,向上滑动!

如果你在这一点上向下滑动屏幕,你会看到一个列表,列出了你可以用可穿戴设备做的各种事情,就像你用 Android Wear Round AVD 做的一样,如左侧窗格中的图 5-27 所示。找到开始图标并点击它来加载设备上的应用。接下来,找到你的 ProAndroidWearable 应用,点击它。一旦你这样做了,你会看到你的应用正在运行,如图 5-27 中的右窗格所示。

9781430265504_Fig05-27.jpg

图 5-27 。找到开始菜单和 ProAndroidWearable 应用,并启动它运行

因为有圆形和方形智能手表,所以你需要在这些模拟器上测试你的应用,以确保你的应用在这两种类型的屏幕上都可以工作。一些顶级制造商,如 LG 电子,甚至拥有这两种类型的屏幕。LG 目前正在提供 G(方形)和 R(圆形)智能手表产品。

摘要

在本章中,您学习了如何为您的 Pro Android 可穿戴设备 IntelliJ 开发环境创建软件仿真。这些被称为 Android 虚拟设备,也被称为 AVDs ,使用 IntelliJ IDEA 中的运行/调试对话框创建,并使用运行image编辑配置菜单序列访问。

首先,您学习了如何使用 AVD 管理器来创建在 Android Studio 中使用的 AVD 模拟器(IntelliJ IDEA)。您为英特尔凌动处理器和 ARM 处理器创建了 Android Wear 圆形和 Android Wear 方形 AVD 仿真器。这样做是为了让您有四个不同的模拟器用于您的 Android 开发工作流程。

当我试图为英特尔凌动运行 Android Wear Round AVD 时,我在 IntelliJ 的输出窗格中收到一条错误消息。因此,我借此机会向您展示了如何在工作站上找到并安装英特尔的硬件加速执行管理器( HAXM ),以防您遇到同样的问题。

我发现英特尔不支持 AMD 处理器(这并不奇怪),所以我将不得不在我的 Pro Android 可穿戴设备开发工作流程中使用这些 ARM AVDs。接下来,您学习了如何实际使用这些 AVD 来运行您的 ProAndroidWearable 应用,以及如何导航 AVD 仿真模式。

在本书的下一部分,你将开始学习关于如何开发 Android 可穿戴应用和添加可穿戴功能的细节。