Skip to content

Files

Latest commit

5f0ab0e · Dec 25, 2021

History

History
530 lines (349 loc) · 31.4 KB

File metadata and controls

530 lines (349 loc) · 31.4 KB

十一、关于安卓穿戴 2.0 的更多东西

安卓穿戴 2.0 是一个突出的更新,捆绑了许多新功能,包括谷歌助手、独立应用程序、新的手表脸和对第三方复杂功能的支持。在前几章中,我们探讨了如何编写不同种类的 Wear 应用程序。Wear 2.0 通过当前的市场调查提供了更多信息,谷歌正在与合作公司合作,为 Wear 构建一个强大的生态系统。

在这一章中,让我们通过以下概念来了解如何推进我们现有的技能:

  • 独立应用程序
  • 弯曲布局和更多用户界面组件
  • 并发症原料药
  • 不同的导航和动作
  • 手腕手势
  • 输入法框架
  • 向游戏商店分发穿戴应用程序

独立应用程序

在磨损 2.0 中,独立应用程序是磨损生态系统的强大功能。如果你的手机不在身边,使用穿戴应用会有多酷!在各种情况下,Wear 设备过去依赖于电话,例如,为了接收新的电子邮件通知,Wear 需要连接到电话以获得互联网服务。现在,穿戴设备可以独立连接到无线网络,并可以同步所有应用程序进行新的更新。用户现在可以在没有手机配对的情况下使用穿戴应用程序完成更多任务。

将应用识别为独立应用

独立应用的想法是穿戴平台的一大特色。Wear 2.0 通过安卓清单文件中的元数据元素来区分独立应用。 在应用标签<application>中,</application>元数据元素被放置在值为真或假的com.google.android.wearable.standalone中。新的元数据元素表明穿戴应用程序是否是一个独立的应用程序,并且不需要手机配对就能运行。当元数据元素设置为真时,应用 a 也可以用于使用 iPhone 的穿戴设备。通常,手表应用程序可以分为以下几类:

  • 完全独立于手机应用
  • 半独立(没有手机配对,wear app 的功能有限)
  • 依赖于手机应用

要使 Wear 应用程序完全独立或半独立,请将元数据的值设置为 true,如下所示:

<application>
...
  <meta-data
    android:name="com.google.android.wearable.standalone"
    android:value="true" />
...
</application>

现在,任何平台,如没有 Play 商店的 iPhone 或安卓手机,也可以使用穿戴应用,直接从 Play 商店下载。通过将元数据的值设置为 false,我们告诉 Android Wear,这个 Wear 应用程序依赖于带有 Play 商店应用程序的手机。

Note: Regardless of the possibility that the value is false, the watch application can be installed before the corresponding phone application is installed. In this way, if a watch application identifies that a companion phone does not have a necessary phone application, the watch application ought to incite the user to install the phone application.

独立应用存储

可以使用标准的 Android 存储 API 在本地存储数据。例如,您可以使用 SharedPreference API、SQLite 或内部存储。到目前为止,我们已经探索了如何将 ORM 库(如 Realm)集成到穿戴应用程序中,不仅是为了存储数据,还为了在穿戴应用程序和电话应用程序之间共享代码。另一方面,特定于形状组件和形状因子的代码可以在不同的模块中。

检测另一台设备上的磨损应用程序

安卓穿戴应用和安卓移动应用可以使用能力应用编程接口识别支持应用。手机和穿戴应用程序可以静态和动态地向配对设备做广告。当一个应用程序位于用户穿戴网络的节点上时,功能应用编程接口使另一个应用程序能够识别相应的已安装应用程序。

广告能力

要从可穿戴设备在手持设备上发起活动,请使用MessageAPI类发送请求。手持安卓设备可以关联多个可穿戴设备;可穿戴应用需要确定相关联的节点适合从手持设备应用启动活动。要宣传手持应用程序的功能,请执行以下步骤:

  1. 在项目的res/values/目录下创建一个 XML 配置文件,并命名为wear.xml
  2. 将名为android_wear_capabilities的资源添加到wear.xml
  3. 定义设备提供的功能

Note: Capabilities are custom strings that you characterize and should be unique within your application.

以下示例显示了如何向wear.xml添加名为voice_transcription的功能:

<resources>
    <string-array name="android_wear_capabilities">
        <item>voice_transcription</item>
    </string-array>
</resources>

检索具有所需功能的节点

最初,我们可以通过调用CapabilityAPI.getCapability()方法来检测有能力的节点。以下示例显示了如何使用voice_transcription功能手动检索可达节点的结果:

private static final String
        VOICE_TRANSCRIPTION_CAPABILITY_NAME = "voice_transcription";

private GoogleApiClient mGoogleApiClient;

...

private void setupVoiceTranscription() {
    CapabilityApi.GetCapabilityResult result =
            Wearable.CapabilityApi.getCapability(
                    mGoogleApiClient, 
                    VOICE_TRANSCRIPTION_CAPABILITY_NAME,
                    CapabilityApi.FILTER_REACHABLE).await();

    updateTranscriptionCapability(result.getCapability());
}

要在有能力的节点连接到可穿戴设备时检测它们,请向googleAPIclient注册一个CapabilityAPI.capabilityListner()实例。下面的例子展示了如何注册监听器并使用voice_transcription功能检索可到达节点的结果:

private void setupVoiceTranscription() {
    ...

    CapabilityApi.CapabilityListener capabilityListener =
            new CapabilityApi.CapabilityListener() {
                @Override
                public void onCapabilityChanged(CapabilityInfo 
                capabilityInfo) {
                    updateTranscriptionCapability(capabilityInfo);
                }
            };

    Wearable.CapabilityApi.addCapabilityListener(
            mGoogleApiClient,
            capabilityListener,
            VOICE_TRANSCRIPTION_CAPABILITY_NAME);
}

Note: On the off chance that you create a service that extends WearableListenerService to identify capability changes, you might need to override the onConnectedNodes() method to listen in to finer-grained connectivity details, for example, when a wearable device changes from Wi-Fi to a Bluetooth connection with the handset. For more data on the most proficient method to listen for important events, read Data Layer Events.

在识别出有能力的节点后,找出将消息发送到哪里。你应该选择一个离你的可穿戴设备很近的节点,以限制消息通过许多节点的路由。附近的节点被描述为与设备直接相关联的节点。要决定一个节点是否在附近,调用Node.isNearby()方法。

检测并引导用户安装手机应用

现在,我们知道如何使用能力应用编程接口检测磨损和移动应用。这是一个引导用户从 Play Store 安装相应应用程序的机会。

使用CapabilityApi检查您的手机应用程序是否安装在配对的手机上。有关更多数据,请参见谷歌示例。如果手机上没有安装您的手机应用程序,请使用PlayStoreAvailability.getPlayStoreAvailabilityOnPhone()检查它是什么类型的手机。

如果PlayStoreAvailability.PLAY_STORE_ON_PHONE_AVAILABLE返回有效,则表示该手机是安装了 Play 商店的安卓手机。拨打穿戴设备上的RemoteIntent.startRemoteActivity()打开手机上的 Play Store。将 URI 市场用于您的电话应用程序(可能与您的 URI 电话不同)。例如,使用市场 URI: market://details?id=com.example.android.wearable.wear.finddevices

如果PlayStoreAvailability.PLAY_STORE_ON_PHONE_UNAVAILABLE被退回,这意味着手机很可能是一部 iOS 手机(无法访问 Play Store)。通过在穿戴设备上调用RemoteIntent.startRemoteActivity()打开 iPhone 上的 App Store。您可以指定应用程序的 iTunes 网址,例如,https://itunes.apple.com/us/application/yourappname.同样,观察从手表打开网址。在 iPhone 上,从 Android Wear,您无法通过编程来确定您的手机应用程序是否已安装。作为最佳实践,给用户一个机制(例如,一个按钮)来手动触发应用商店的打开。

使用前面描述的remoteIntent应用编程接口,您可以确定任何网址都可以从穿戴设备在手机上打开,并且不需要手机应用程序。

获取重要信息

在大多数使用情况下,当我们从互联网上获取数据时,我们只是获得了必要的信息。再多一点,我们可能会遇到无意义的闲置、内存使用和电池使用。

当穿戴设备与蓝牙 LE 关联相关联时,穿戴应用可以具有每秒仅 4 千字节的数据传输容量的入口。根据磨损情况,规定了相应的步骤:

  1. 查看您的网络请求和响应,了解电话应用程序的其他信息

  2. 在通过网络将巨大的图片发送到手表之前,先将其缩小

云消息

对于确定用于通知的任务,应用程序可以在 Wear 应用程序中专门使用Firebase Cloud Messaging(FCM);穿戴 2.0 不支持谷歌云通知。

对于磨损应用,没有特定的 FCM APIs 它采用了移动应用程序通知的比较配置:FCM 在佩戴和打瞌睡模式下的功能令人钦佩。FCM 是发送和接收穿戴设备通知的推荐方法。

从服务器接收通知的过程是,应用程序需要向服务器发送设备唯一的 Firebase registration_id。然后,服务器可以区分FCM_REST端点并发送通知。FCM 消息采用 JSON 格式,可以包含以下任何一种伴随的有效载荷:

  • 通知有效载荷:通用通知数据;当通知到达 Wear 时,应用程序可以检查通知,用户可以启动收到通知的应用程序。
  • 数据有效载荷:有效载荷将具有自定义键值集。有效载荷将作为数据传送给磨损应用。

当我们开发专门针对穿戴设备的应用程序、获取高带宽网络以及降低穿戴基准特有的图像质量时,穿戴应用程序会包含许多问题。此外,用户界面概述和保持后台服务,等等。当我们创建应用程序时,将此放在首要位置将使它们在人群中脱颖而出。

并发症原料药

对于手表来说,复杂肯定只是老一套。网上说,第一块复杂的怀表是在 16 世纪发现的。智能手表是我们考虑复杂性的所有组件的理想场所。在安卓穿戴中,手表表面显示的数据不仅仅是时间和日期,比如步数计数器、气候预报等等。到目前为止,这些并发症是如何发挥作用的,这是一个主要的制约因素。到目前为止,每个定制的 watch face 应用程序都需要执行自己的基本原理来获取要显示的信息。例如,如果两个手表表面有一个比较组件来获得步数和显示相关信息,那么这将是徒劳的。安卓穿戴 2.0 打算用新的并发症应用编程接口来解决这个问题。

如果出现复杂情况,则由一个手表表面通信数据提供商承担主要部分。它包含了获取信息的逻辑。观察面无法立即访问数据提供者;当有其他带有所选复杂数据的数据时,它将得到回调。另一方面,数据提供者不知道数据将如何被利用;这取决于手表的表面。

随附的描述讨论了观看面部如何从数据提供者处获得复杂数据:

复杂数据提供者

新的并发症原料药具有巨大的潜力;它可以访问电池电量、气候、步数等等。作为服务的复杂数据提供者扩展了ComplicationProviderService。这个基类有一组回调,记住最终目标,即知道何时选择一个提供者作为当前 watchface 的数据源:

  • (onComplicationActivated):激活并发症时调用此回调方法。
  • (onComplicationDeactivated):当并发症被停用时,调用该回调方法。
  • (onComplicationUpdate):当并发症更新了特定并发症 id 的信息时,调用该回调。

ComplicationProviderService类是一个抽象类,扩展到服务。提供商服务必须实现onComplicationUpdate (int、int 和ComplicationManager)来响应来自复杂系统的更新请求。该服务的清单声明必须包含ACTION_COMPLICATION_UPDATE_REQUEST的意图过滤器。如果需要,还应该包含用于确定支持的类型、刷新周期和配置操作的元数据:(METADATA_KEY_SUPPORTED_TYPESMETADATA_KEY_UPDATE_PERIOD_SECONDSMETADATA_KEY_PROVIDER_CONFIG_ACTION)。

服务的清单条目应该同样包含 android: Icon 属性。给定的图标应该是代表提供者的单色白色图标。该图标将出现在提供商选择器界面中,并且可能同样被合并到ComplicationProviderInfo中,用于观看面部以在他们的配置活动中显示。

附带的代码演示了一个构建器模式ComplicationsData到一个短文本类型,用下一个事件的日期和一个可选图标填充ComplicationData:

ComplicationData.Builder(ComplicationData.*TYPE_SHORT_TEXT*)
    .setShortText(ComplicationText.*plainText*(formatShortDate(date)))
    .setIcon(Icon.*createWithResource*(context, R.drawable.*ic_event*))
    .setTapAction(createContactEventsActivityIntent())
    .build();

给手表表面增加了复杂性

安卓穿戴 2.0 向您的智能手表传达了许多新组件。然而,其中一个更明显的是手表表面适应性复杂的扩展。并发症是一个两部分的系统;手表表面工程师可以计划他们的手表表面有开放的复杂插槽,应用程序开发人员可以表面部分他们的应用程序,以纳入他们作为复杂。戴表面部应用程序可以接收复杂数据,并使用户能够选择数据提供商。安卓穿戴为数据源提供了用户界面。我们可以给一些手表表面添加复杂的东西,或者来自应用程序的数据。你的穿戴 2.0 有一些复杂的东西来展示你的电池寿命和日期,这只是一个开始。您还可以包含一些第三方应用程序带来的复杂性。

接收数据和渲染复杂性

为了开始接收复杂数据,一个观察面使用观察面复杂标识列表调用WatchFaceService.Engine类中的setActiveComplications。手表表面创建这些标识来显著识别手表表面上可能出现复杂情况的槽,并将它们传递给createProviderChooserIntent方法,以使用户能够选择哪个复杂情况应该出现在哪个槽中。并发症数据通过WatchFaceService.Engine回拨onComplicationDataUpdate传递。

允许用户选择数据提供者

安卓穿戴提供了一个用户界面(通过一个活动),使用户能够为特定的复杂情况选择提供商。观看面部可以调用createProviderChooserIntent方法来获得意图,该意图可用于演示选择器界面。该意图必须与startActivityForResult一起使用。当手表表面呼叫createProviderChooserIntent时,手表表面提供手表表面复杂性标识和支持的类型列表。

复杂的用户交互

提供者可以指定用户点击某个复杂情况时发生的操作,因此大多数复杂情况都应该是可点击的。该动作将被指定为PendingIntent,包含在ComplicationData对象中。观察面负责检测复杂情况下的点击,并在点击发生时触发待定意图。

复杂数据的权限

穿戴应用程序必须具有以下权限才能接收并发症数据并打开提供商选择器:

com.google.android.wearable.permission.RECEIVE_COMPLICATION_DATA

打开提供者选择器

未被授予上述权限的观察面将无法启动提供者选择器。为了更容易地请求许可和启动选择器,可穿戴支持库中提供了ComplicationHelperActivity类。几乎在所有情况下都应该使用这个类来代替ProviderChooserIntent来启动选择器。要使用ComplicationHelperActivity,将其添加到清单文件中的观察面:

<activity android:name="android.support.wearable.complications.ComplicationHelperActivity"/>

要启动提供者选择器,调用ComplicationHelperActivity.createProviderChooserHelperIntent方法获取意图。新的意图可以与startActivitystartActivityForResult一起使用来启动选择器:

startActivityForResult(
  ComplicationHelperActivity.createProviderChooserHelperIntent(
     getActivity(),
     watchFace,
     complicationId,
     ComplicationData.TYPE_LARGE_IMAGE),
  PROVIDER_CHOOSER_REQUEST_CODE);

当助手活动启动时,助手活动检查权限是否被授予。如果权限未被授予,帮助者活动会发出运行时权限请求。如果许可请求被接受(或不需要),将显示提供者选择器。

对于手表脸,有很多场景需要考虑。在你实现手表表面的复杂性之前,检查所有这些。您如何接收并发症数据?它是来自提供商、远程服务器还是 rest 服务?提供商和 watch face 来自同一个应用吗?您还应该检查是否缺少适当的权限等等。

了解不同的佩戴导航

安卓穿戴在各个方面都在发展。在 wear 1.0 中,屏幕之间的切换过去对 wear 用户来说既繁琐又混乱。现在,谷歌推出了材质设计和互动抽屉,例如:

  • 导航抽屉:导航抽屉是和手机 app 导航抽屉类似的组件。它将允许用户在视图之间切换。用户可以通过进入内容区域的顶部并从空白处向下滚动来找到穿戴设备上的导航抽屉。我们可以通过将setShouldOnlyOpenWhenAtTop()方法设置为 false 来允许抽屉在滚动父内容内的任何位置打开,并且可以通过将其设置为 true 来限制它。
  • 单页导航抽屉:一款穿戴应用可以在单页和多页上向用户呈现视图。新的导航抽屉组件允许通过设置app:navigation_style to single_page将内容放在单个页面上。
  • 动作抽屉:每个类别的应用都会做一些常见的动作。在穿戴应用程序中,动作抽屉提供了对所有这些动作的访问。通常,动作抽屉位于穿戴应用程序的底部区域,它将有助于提供特定于上下文的用户动作,类似于手机应用程序上的动作栏。让动作抽屉位于底部或顶部是开发人员的选择,当用户滚动内容时可以触发动作抽屉。

下图是耐磨 2.0 导航抽屉的快速视图:

以下示例说明了在 messenger 应用程序中使用操作执行的操作回复:

履行

为了让新引入的组件出现在你的应用中,用一个WearableDrawerLayout对象声明你的用户界面作为你布局的根视图。在WearableDrawerLayout中,再添加一个实现NestedScrollingChild的视图来包含主要内容,以及附加视图来包含抽屉的内容。

下面的 XML 代码说明了我们可以给WearableDrawerLayout带来生命的方式:

<android.support.wearable.view.drawer.WearableDrawerLayout
    android:id="@+id/drawer_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:deviceIds="wear">

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <LinearLayout
            android:id="@+id/linear_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" />

    </android.support.v4.widget.NestedScrollView>

    <android.support.wearable.view.drawer.WearableNavigationDrawer
        android:id="@+id/top_navigation_drawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <android.support.wearable.view.drawer.WearableActionDrawer
        android:id="@+id/bottom_action_drawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:action_menu="@menu/action_drawer_menu"/>

</android.support.wearable.view.drawer.WearableDrawerLayout>

单页导航抽屉

单页导航抽屉在 Wear 应用程序的不同视图中更快、更精简。要创建单页导航抽屉,请将属性navigation_style="single_page"应用于抽屉。例如:

 <android.support.wearable.view.drawer.WearableNavigationDrawer
        android:id="@+id/top_drawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/holo_red_light"
        app:navigation_style="single_page"/>

现在,下一个主要的事情是填充关于抽屉布局的数据。我们可以借助抽屉布局中的app:using_menu属性,通过从菜单目录加载 XML 文件,在 XML 布局中实现。

使用WearableDrawerView,我们可以设计自己的定制抽屉布局。下面的代码演示了自定义抽屉布局:

<android.support.wearable.view.drawer.WearableDrawerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="top"
        android:background="@color/red"
        app:drawer_content="@+id/drawer_content"
        app:peek_view="@+id/peek_view">
        <FrameLayout
            android:id="@id/drawer_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <!-- Drawer content goes here.  -->
        </FrameLayout>
        <LinearLayout
            android:id="@id/peek_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:paddingTop="8dp"
            android:paddingBottom="8dp"
            android:orientation="horizontal">
            <!-- Peek view content goes here.  -->
        <LinearLayout>
    </android.support.wearable.view.drawer.WearableDrawerView>

有重大抽屉事件,如onDrawerOpened()onDrawerClosed()onDrawerStateChanged()。我们也可以创建自定义事件;默认情况下,我们可以使用前面的回调集来监听抽屉活动。

磨损 2.0 中的通知

Wear 2.0 更新了通知的视觉风格和交互范例。Wear 2.0 引入了可扩展的通知,它提供了更多的内容区域和操作来提供最佳体验。视觉更新包括材质设计、通知的触摸目标、深色背景颜色以及通知的水平滑动手势。

内嵌动作

内联操作允许用户在通知流卡内执行特定于上下文的操作。如果通知配置为内联操作,它将显示在通知的底部。内联操作是可选的;谷歌推荐它用于不同的用例,在这些用例中,用户必须在检查通知后执行特定的动作,例如,短信回复和停止健身活动。一个通知只能有一个内联操作,要启用它,我们需要将setHintDisplayActionInline()设置为真。

要向通知添加内联操作,请执行以下步骤:

  1. 如下创建RemoteInput.Builder的实例:
String[] choices = context.getResources().getStringArray(R.array.notification_reply_choices);     choices = WearUtil.addEmojisToCannedResponse(choices);   
RemoteInput remoteInput = new RemoteInput.
Builder(Intent.EXTRA_TEXT)         
.setLabel(context.getString
      (R.string.notification_prompt_reply))      
     .setChoices(choices)    
     .build();
  1. 使用addRemoteInput()方法,我们可以附加RemoteInput对象:
NotificationCompat.Action.Builder actionBuilder = new NotificationCompat.Action.Builder(
        R.drawable.ic_full_reply, R.string.notification_reply, 
        replyPendingIntent);
    actionBuilder.addRemoteInput(remoteInput);
    actionBuilder.setAllowGeneratedReplies(true);
  1. 最后,添加一个提示以内联方式显示操作,并对通知的操作使用 add action 方法:
// Android Wear 2.0 requires a hint to display the reply action inline.
    Action.WearableExtender actionExtender =
        new Action.WearableExtender()
            .setHintLaunchesActivity(true)
            .setHintDisplayActionInline(true);
    wearableExtender.addAction
    (actionBuilder.extend(actionExtender).build());

扩展通知

Wear 2.0 引入了可扩展的通知,它能够显示每个通知的实质性内容和操作。扩展通知遵循材质设计标准,当我们将附加内容页面附加到通知时,它们在扩展通知中可用,用户将在检查通知中的操作和内容时获得应用内体验。

扩展通知的最佳实践

何时使用扩展通知:

  1. 配对电话的通知应该使用扩展通知。
  2. 当应用程序通知在本地运行时,我们不应该使用扩展通知,而应该通过单击它来启动应用程序。

通知的桥接模式

桥接模式指的是穿戴系统和配套应用程序之间共享通知。独立应用程序和伴随应用程序可以获得复制的通知。安卓穿戴集成了处理副本通知问题的组件。

开发人员可以按如下方式更改通知的行为:

  • 在清单文件中指定桥接配置
  • 在运行时指定桥接配置
  • 设置解雇标识,以便通知解雇在设备间同步

清单文件中的桥接配置:

<application>
...
  <meta-data
    android:name="com.google.android.wearable.notificationBridgeMode"
    android:value="NO_BRIDGING" />
...
</application>

运行时桥接配置(使用BridgingManager类):

BridgingManager.fromContext(context).setConfig(
  new BridgingConfig.Builder(context, false)
    .build());

使用解雇标识同步通知解雇:

NotificationCompat.WearableExtender wearableExtender =
  new NotificationCompat.WearableExtender().setDismissalId("abc123");
Notification notification = new NotificationCompat.Builder(context)
// ... set other fields ...
  .extend(wearableExtender)
  .build();

通知是吸引用户注意在穿戴设备中使用您的应用程序的重要组件。安卓穿戴 2.0 提供了更多,并将继续提供更多,通知,消息风格等智能回复。

穿戴 2.0 输入法框架

我们已经在前面几章构建的应用中看到了磨损输入机制。穿戴 2.0 通过将安卓输入法框架 ( IMF )扩展到安卓穿戴,支持语音以外的输入法。国际货币基金组织允许虚拟键盘、屏幕键盘和其他输入方法用于文本输入。用于穿戴设备的国际货币基金组织应用编程接口与其他外形规格相同,但由于屏幕尺寸有限,使用略有不同。Wear 2.0 自带系统默认输入法编辑器 ( IME )并开放 IMF APIs 供第三方开发者为 Wear 创建自定义输入法。

调用磨损输入法

要调用国际货币基金组织的磨损,你的应用编程接口水平应该是 23 或更高的平台。在包含编辑文本字段的安卓穿戴应用程序中:触摸文本字段将光标放在字段中,并自动显示聚焦的货币基金组织。

手腕手势

Wear 2.0 支持手腕手势。当您不能使用穿戴设备的触摸屏时,您可以利用手腕手势进行快速的单手交互,例如,当用户正在慢跑并且他想要使用手腕手势执行特定于上下文的操作时。应用程序中很少有不可用的手势,如按下手腕、抬起手腕和摇动手腕。每个手腕手势都映射到关键事件类中的一个整数常量:

| 手势 | KeyEvent(密钥事件) | 描述 | | 轻弹手腕 | KEYCODE_NAVIGATE_NEXT | 这一关键代码转到下一项。 | | 轻弹手腕 | KEYCODE_NAVIGATE_PREVIOUS | 该密钥代码转到上一项。 |

在应用程序中使用手势的最佳实践

以下是在应用程序中使用手势的最佳实践:

  • 查看KeyEventKeyEvent.Callback页面,了解向您的视图传递关键事件
  • 用平行的方式做手势
  • 提供视觉反馈
  • 不要把重复的轻弹手势重新解释成你自己的新手势。这可能与系统的摇动手腕手势冲突。
  • 小心使用requestFocus()clearFocus()

认证协议

有了独立手表,穿戴应用现在可以完全在手表上运行,而无需配套应用。这一新功能还意味着,当安卓穿戴独立应用程序需要从云中访问数据时,它们将需要自行管理身份验证。安卓穿戴支持多种身份验证方法,支持独立穿戴应用获取用户身份验证凭据。现在,穿戴支持如下:

  • 谷歌登录
  • OAuth 2.0 支持
  • 通过数据层传递令牌
  • 自定义代码身份验证

所有这些协议都遵循与移动应用编程相同的标准;在将谷歌登录集成到 wear 或其他协议中没有大的变化,但这些协议有助于授权用户。

应用分发

我们现在知道如何为 wear 2.0 开发应用程序,根据我们过去的经验,我们可能已经向 Play 商店发布了一个安卓应用程序。通过谷歌开发者控制台向 Play 商店发布独立的穿戴应用程序或通用穿戴应用程序需要什么?

穿戴 2.0 捆绑游戏商店应用程序;用户可以搜索特定于穿戴设备的应用程序,当他们连接到互联网时,可以直接将其安装在穿戴设备上。一般来说,Play 商店中的 wear 2.0 应用程序至少需要一个,并且在清单文件中的 API 级别要达到 25 或更高。

发布你的第一款穿戴应用

要使您的应用程序出现在在线游戏商店中,请生成一个签名的穿戴 apk。如果是穿戴式独立应用程序,发布该应用程序将类似于发布移动应用程序。如果不是单机,需要上传多个 apk,那么就按照https://developer . Android . com/Google/play/publishing/multi-apk . html进行操作。

让我们在 Play 商店发布磨损笔记应用程序。这是谷歌为开发者提供的专用仪表盘,让你可以在 Play 商店中管理你的应用。谷歌有一次性的 25 美元注册费,你需要在上传应用之前支付。收费背后的原因是为了防止虚假、重复的账户,从而防止不必要的劣质应用程序充斥游戏商店。

以下步骤说明了我们如何向 playstore 发布我们的 wear 应用程序:

  1. 参观https://play.google.com/apps/publish/:

  1. 点击创建应用程序,并给你的应用程序一个标题。

  2. 之后,你会看到一个表格,填写描述和其他细节,其中包括该应用程序的截图以及图标和促销图形。

  3. 在商店列表中,填写关于该应用的所有正确信息。

  4. 现在,上传签名的穿戴 apk。

  5. 回答内容评级问卷,获得评级,并将评级应用到您的应用程序。

  6. 在定价和分发中,您需要有一个商家帐户来在定价模型中分发您的应用程序。现在,wear note 应用是一个免费的 wear 应用,它可以让你选择免费的。

  7. 选择列表中的所有国家/地区,然后选择穿戴设备 apk:

  1. 谷歌将审查穿戴二进制文件,并批准在穿戴播放商店分发。
  2. 恭喜你!现在,您的应用程序可以发布了:

摘要

在本章中,我们已经了解了独立应用程序和复杂应用程序接口。我们已经看到了如何使用能力应用编程接口来检测配套应用,我们对独立应用和发布穿戴应用也有了清晰的概念。

本章研究了我们如何加强对 wear 2.0 及其组件的理解,以及对独立应用程序、弯曲布局和更多用户界面组件的详尽理解,并构建了带有导航抽屉和动作抽屉的 wear 应用程序。它还提供了对手腕手势的简单理解,并在穿戴应用程序中使用它们,使用输入法框架,并将穿戴应用程序分发给谷歌 Play 商店。