Advertisement
  1. Code
  2. Android SDK

穿戴OS和Android通话:通过可穿戴数据层交换信息

by
Read Time:19 minsLanguages:

Chinese (Simplified) (中文(简体)) translation by Zhang Xiang Liang (you can also view the original English article)

当涉及到进行快速、简单的任务,可穿戴的应用就有优势了,作为一个你手腕上智能手表,它总是会比智能手机或平板电脑更方便放在你的包中。

但是没有完美的小工具,没有人对他们的智能手表的电池续航力持否定态度,或者声称它们的智能手机或平板电脑的速度和功能都很快。

为了提供最佳的用户体验,您需要发挥设备的优势。如果您正在开发Wear OS(操作系统,以前称为Android Wear),那么您将处于独特的位置,可以从两款完全不同的设备中挑选出最佳功能。

基本上,你可以拥有两全其美!

在本文中,我将向您展示如何通过打开两者之间的通信渠道,充分利用Android OS和Wear OS提供的所有功能。一旦掌上电脑应用程序及其可穿戴设备正在聊天,您就可以根据最适合的设备委派任务 - 无论是将电池密集型任务发到掌上电脑,还是通过显示它来确保您的应用程序的最重要信息始终在用户的手腕上易于访问。

在本文的最后,您将创建一个掌上电脑和可穿戴应用程序,可以通过可穿戴数据层和MessageClientAPI 交换信息。

什么是可穿戴数据层?

可穿戴数据层提供对各种客户机类的访问,您可以使用这些客户机类来存储和检索数据,而不必使用诸如数据序列化之类的技术细节而烦心。一旦这些信息在数据层上,手持设备和可穿戴设备都可以访问这些信息。

在本文中,我们将重点介绍MessageClientAPI,这是一种可用于将信息发送到可穿戴数据层的单向通信机制。此API对于执行远程过程调用(RPC)特别方便,例如Activity在配对的手持设备或可穿戴设备上远程启动。

我们来看一个例子:假设您已经创建了一个导航应用程序。这个应用程序需要a)检索位置更新,并b)给用户指示。

监控设备的位置是一项密集型任务,可以快速消耗典型可穿戴设备上可用的有限电池。使用MessageClientAPI,您的可穿戴应用程序可以指示其手持对象执行此项工作。一旦掌上电脑执行了这个繁重的工作,它可以通过数据层将结果信息发送回穿戴者,这样您的应用程序就可以获取所需的信息,而无需从可穿戴设备的剩余电池中取出大块信息。 一旦掌上电脑执行了这个繁重的工作,它可以通过数据层将结果信息发送回穿戴者,这样您的应用程序就可以获取所需的信息,而无需从可穿戴设备的剩余电池中取出大块信息。

通常,如果您的可穿戴应用程序需要执行需要大量电池或处理能力或复杂用户交互的任务,则应考虑将此工作卸载到相应的手持应用程序。相比之下,如果您的应用处理特别对时间敏感的信息或用户可能随时随地访问的内容,则应在可穿戴应用中显示此信息。 

在我们的导航应用示例中,从掌上电脑到可穿戴设备的每个方向推送使得这些信息更易于访问,特别是对于那些外出并且迷路后绝望的人!

开箱即用的MessageClientAPI是一个单向的沟通机制,但是你可以通过创建一个发送者实现双向通讯,并在接收器两个项目的手持设备和可穿戴式模块,而这正是我们要做的。

创建可穿戴式和手持式模块

在本文中,我们将创建一个可穿戴应用程序,该应用程序可以在掌上电脑向数据层发送新消息时识别它。然后,此可穿戴应用将通过检索此消息并将其显示为其UI的一部分来进行响应。

然后,我们将冲洗并重复,创建一个手持应用程序,监控数据层从其可穿戴对象发送的消息。

通过MessageClientAPI 发送的信息只能由创建它的应用程序访问。如果系统将识别您的可穿戴设备和掌上电脑属于同一应用程序,那么他们需要具有相同的软件包名称,版本代码和签名证书。勾选所有这些框的最简单方法是创建一个包含可穿戴模块和手持模块的项目: 。

  • 创建一个名为DataLayer的新项目。
  • 在目标Android设备屏幕上,选择手机平板电脑并穿戴。点击下一步。
  • 对于您的手机和平板电脑模块,请选择空Activity模板,然后单击下一步
  • 对于您的穿戴式模块,请选择Blank Wear Activity模板,然后单击下一步,然后单击完成

创建你的手持应用程序

由于我们正在实施双向通信,我们的掌上电脑和移动模块都需要他们自己的收听者和发送者。首先在我们的手持应用程序中实现此功能。

我将保持简单并创建一个UI,TextView它将显示从数据层检索到的各种消息,以及一个按钮,当点击该按钮时,它将自己的消息发送到数据层。  

打开您的移动模块的activity_main.xml文件,并添加以下内容:

由于我们引用了一些dimens.xml值,因此我们需要提供这些值的定义:

  • 控制 -点击移动模块的res / values目录。
  • 选择新建>值资源文件
  • 将该文件命名为dimens.xml,然后单击确定
  • 添加以下内容:

这给了我们以下用户界面:

Create the user interface for your projects handheld componentCreate the user interface for your projects handheld componentCreate the user interface for your projects handheld component

添加您的依赖关系

打开移动模块的build.gradle文件并添加以下依赖项:

在MainActivity中显示和发送消息

在MainActivity,我们需要执行以下操作:

  1. 让用户保持循环!

当用户点击Talk to the Wearable按钮时,需要发生两件事情:

  • 手持设备向可穿戴设备发送消息。我将使用“ 我收到来自手持设备的消息。
  • 手持设备提供可视确认消息已成功发送。我将使用“ 我向可穿戴设备发送了一条消息 ”。

当用户点击手持设备的对话按钮时,手持设备将尝试向数据层发送消息。只有在排队等待发送到特定设备后,系统才会认为此消息已成功发送,这意味着至少需要有一个配对的设备可用。

在最好的情况下,用户点击Talk to the Wearable,消息就会排队等候发送,而我们的掌上电脑高歌扬扬地说:“ 我只是给可穿戴设备发送了一条消息。

但是,如果没有可穿戴设备可用,则消息不排队,并且默认情况下,用户无法确认我们的应用程序甚至尝试发送消息。这可能会导致用户怀疑应用程序是否坏了,所以我也将显示正在发送短信...。通知,而不管消息是否成功排队。 测试此应用程序时,您可能还需要快速连续触发多个消息。为了清楚每个消息何时排队等待发送,我为每条消息添加一个计数器,因此我们的掌上电脑将显示我刚发送消息给可穿戴设备2,我只是向可穿戴设备3发送消息,以此类推。

在连接的另一端,我们的可穿戴设备将显示我刚刚收到来自手持设备2 的消息,我刚收到来自手持设备3的消息,依此类推。 。

2.显示收到的消息

在下一节中,我们将创建一个MessageService监视数据层并检索消息。由于我们的服务将在不同的线程上执行其工作,因此它将向我们广播这些信息MainActivity,然后我们将负责更新UI。

3.定义路径

您通过MessageClientAPI 传输的每条消息都必须包含一条路径,该路径是唯一标识该消息的字符串,并允许您的应用从连接的另一端访问它。

该路径始终以正斜杠(我使用/ my_path)开头,并且还可以包含可选的有效负载,形式为字节数组。

4.检查你的节点!

在Google Play服务7.3.0及更高版本中,您可以将多个可穿戴设备连接到单个手持设备,例如,用户可能会溅到多个可穿戴设备上,这些可穿戴设备之间可以切换或同时使用。Wear OS设备也可能会在其使用期限内连接到多个手持设备,例如,如果用户拥有Android智能手机和平板电脑,或者他们用旧的智能手机替换旧智能手机。请注意,任何能够连接到数据层的设备都称为应用程序代码中的节点。 。

在本文中,我将假设只有一种可用的可穿戴设备。或者,您可以选择使用GetConnectedNodesgetLocalNode发送消息给哪些设备。

让我们在我们的下面实现所有这些MainActivity:

创建一个监听服务

此时,我们的掌上电脑能够将消息推送至数据层,但由于我们要实现双向通信,因此还需要侦听到达数据层的消息。

在本节中,我们将创建一个执行以下操作的服务:

  1. 监视数据层的事件

您可以通过实现DataClient.OnDataChangedListener接口或扩展来监视数据层WearableListenerService。我选择后者,因为扩展有一些好处WearableListenerService。首先,WearableListenerService它在后台线程上工作,所以你不必担心阻塞主UI线程。 其次,系统管理WearableListenerService生命周期以确保它不消耗不必要的资源,根据需要绑定和解除绑定服务。

缺点是WearableListenerService即使应用程序没有运行,它也会监听事件,并且如果它检测到相关事件,它将启动您的应用程序。如果您的应用程序只需要在事件已经运行时对其进行响应,那么WearableListenerService可能会不必要地消耗设备的电池。

2.覆盖相关的数据回调

WearableListenerService可以侦听一系列数据层事件,因此您需要覆盖您有兴趣处理的事件的数据事件回调方法。在我们的服务中,我正在实现onMessageReceived,这将在从远程节点发送消息时触发。

3.检查路径

每次将消息发送到数据层时,我们的应用程序都需要检查它是否具有正确的my_path标识符。

4.广播消息 MainActivity

由于WearableListenerService在其他线程上运行,因此无法直接更新UI。为了在我们的应用程序中显示消息,我们需要将它转发到MainActivity,使用LocalBroadcastManager

要创建服务:

  • 确保您选择了移动模块。
  • 从Android Studio工具栏中选择新建>服务
  • 命名此服务MessageService
  • 添加以下内容:

最后,打开Manifest并向MessageService条目添加一些信息:

如前所述,只有当一个消息排队等待发送时,该系统才会考虑成功发送消息,这只有在一个或多个可穿戴设备可用时才会发生。

您可以通过在兼容的智能手机或平板电脑或Android虚拟设备(AVD)上安装移动模块来看到这一点。 点击Talk to the Wearable按钮,应用程序将只显示发送消息...文本。我刚刚发送的可穿戴......文本将不会出现。 

如果我们的消息将被排队等待发送,那么我们需要在项目的可穿戴模块中实现另一组发送者和接收者组件。

创建您的可穿戴式应用程序

我们的可穿戴应用程序将具有与其手持设备相似的功能,因此我将跳过我们已经介绍的所有代码。

再次,让我们开始创建应用程序的用户界面。打开wear模块的activity_main.xml文件并添加以下内容:

在这一点上,你的用户界面应该是这样的:

Create the UI for your Android projects Wear OS module Create the UI for your Android projects Wear OS module Create the UI for your Android projects Wear OS module

打开你的build.gradle并添加下列依赖项:

现在,我们需要将我们的消息发送到数据层:

接下来,我们需要创建一个监听器来监听传入消息的数据层,并在收到新消息时通知MainActivity:

  • 确保选择了wear模块。
  • 从Android Studio工具栏选择新建>服务
  • 将此服务命名为MessageService,然后添加以下内容:

打开模块Manifest,为以下内容创建一个意图过滤器WearableListenerService

您可以从GitHub下载完整的项目

测试你的应用

此时,您有两个可以通过数据层交换消息的应用程序,但是如果您要将这些沟通技巧应用于测试,则需要将您的项目安装在手持设备和可穿戴设备上。

如果你是一名Android开发人员,那么至少有一部Android智能手机或平板电脑在铺设,但可穿戴设备仍然是一种相对较新的小众产品,所以你可能还没有投资智能手表。

如果您决定追求Wear OS开发,那么您应该在某个时候冒险购买智能手表,因为在真实的Android设备上测试您的应用程序是不可替代的。但是,如果您只是试用Wear OS,那么您可以创建一个仿真可穿戴设备的AVD,其方式与创建模拟智能手机或平板电脑的AVD完全相同。然后,您可以使用端口转发让您的AVD和您的Android实体设备通话。 。

第一步是创建一个可穿戴的AVD并在您的模拟设备上安装您的穿戴模块:

  • 从Android Studio工具栏选择工具> Android> AVD管理器
  • 点击创建虚拟设备...
  • 从左侧菜单中选择Wear
  • 选择您想要模拟的可穿戴设备,然后单击下一步
  • 选择您的系统映像,然后单击下一步
  • 给你的AVD一个名字,然后点击完成
  • 从Android Studio工具栏选择Run> Run ...
  • 在出现的小弹出窗口中,选择Wear ...
  • 选择您刚刚创建的可穿戴AVD。过一会儿,AVD将会启动,并已安装可穿戴组件。

接下来,将手持设备模块安装在智能手机或平板电脑上

  • 将您的Android实体设备连接到您的开发机器。
  • 从Android Studio工具栏选择Run> Run ...
  • 提示时选择移动

最后,我们需要让我们的实体Android设备和我们的AVD聊天:

  • 确保掌上电脑已启用蓝牙功能(设置>蓝牙),并通过USB电缆将其连接到开发机器。
  • 在您的掌上设备上,打开Play商店并通过Google应用下载Wear OS(以前称为Android Wear)。
  • 启动Wear OS应用程序。
  • 在您模拟的可穿戴设备上,单击随附的按钮条中的主页按钮(光标位于以下屏幕截图中),然后打开“ 设置”应用程序。

Testing your project by connecting your emulator and your Android smartphone or tabletTesting your project by connecting your emulator and your Android smartphone or tabletTesting your project by connecting your emulator and your Android smartphone or tablet

  • 选择System> About,然后重复单击Build number,直到您看到一个您现在是开发人员消息。
  • 单击Back按钮两次返回主设置菜单。您应该注意到一个新的开发者选项项目; 点击它。
  • 选择ADB调试
  • 在您的开发机器上,打开一个新的命令提示符(Windows)或终端(Mac),然后更改目录(cd),使其指向Android SDK的platform-tools文件夹。例如,我的命令如下所示:
  • 确保ADB(Android调试桥)通过运行/.adb devices命令识别模拟器和连接的智能手机或平板电脑。它应该返回两个独立设备的代码。
  • 通过在“终端/命令提示符”窗口中运行以下命令,将AVD的通信端口转发至所连接的智能手机或平板电脑:
  • 在掌上电脑中,启动Wear OS应用程序。浏览任何介绍性对话,直到您到达Wear OS主屏幕。
  • 打开左上角的下拉菜单并选择添加新手表
  • 点击右上角的虚线图标,然后选择与模拟器配对。片刻之后,手持设备应连接到您的模拟器。
Use the Wear OS app to pair your emulator with your Android smartphone or tabletUse the Wear OS app to pair your emulator with your Android smartphone or tabletUse the Wear OS app to pair your emulator with your Android smartphone or tablet

您现在已准备好测试您的应用程序!启动模拟器上的Wear组件和掌上电脑上的移动组件,然后点击不同的Talk ...按钮进行试验。

当您轻触手持设备上的可穿戴设备时,应显示以下消息:

  • 掌上电脑: “我刚给掌上电脑发送了一条消息。” 
  • 可穿戴设备: “我刚收到手持设备发来的消息。”
You can now exchange messages over the Data Layer using the MessageClient APIYou can now exchange messages over the Data Layer using the MessageClient APIYou can now exchange messages over the Data Layer using the MessageClient API

当您在可穿戴设备上轻击掌上电脑时,应显示以下消息:

  • 可穿戴设备: “我只是给手持设备发送了一条消息。”
  • 手持设备: '我刚刚收到可穿戴设备的信息。“

结论

在本文中,我们研究了如何通过可穿戴数据层在掌上电脑和穿戴式应用之间交换消息。 

在制作过程中,您可能会使用这种技术做一些比简单交换相同文本行更有趣的事情!例如,如果您开发了可在用户的智能手机上播放音乐的应用程序,则可以通过将数据从穿戴设备发送到手持设备,通过数据层直接从可穿戴设备播放,暂停和跳过歌曲。

您可以在官方Android文档中了解更多关于可穿戴数据层的信息,包括如何同步更复杂的数据。

关注我们的公众号
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.