Android Wear开发

Android Wear从2014年3月发布到现在已经从1.0发展到2.0(目前还没正式发布)。其产品定位也发化了巨大变化,因为Android Wear 1.0通讯方式只有蓝牙,限定了系统,比较依赖手机。比如:重新连接新的手机,手表端会删除所有安装的应用,重新同步新手机的应用到手表。所有应用更新,系统更新都需要通过手机端来完成,没有单独的应用市场。可以理解为Android Wear手表是个手机伴侣。Android Wear 2.0定位则完全不同,Android Wear 2.0支持通讯方式有蓝牙、Wifi、3G/4G等方式,现在可以完全摆脱手机使用。现在官方也推荐数据是通过Wifi或者3G/4G的方式来获取,而不是蓝牙。

目前Android Wear分国际版本和中国版本(据说到Android Wear 2.0正式发布时不分了,统一用一个库)。国际版本在国内无法使用(原因众所周知)。当然使用的库也不一样(国内版本其实就是国际版本的阉割版)。但这个库只是在手机侧不一样,在手表侧的库是一样的,使用标准的Android Wear 库就可以。

一、Hello World 之Android Wear版本

手表应用主要有两种,一种为可以单独在手表上使用,比如表盘应用。这类应用与普通的Android 应用开发流程没有太大区别。另一种就是手表侧应用需要与手机侧应用进行数据交互,这个需要分别在手表和手机端开发,此时需要注意一点,手表端与手机端的应用必须是包名相同,并且签名也一样,手机端的应用权限需要包括手表端的权限,否则两个应有无法通讯。应该也是基于安全性考虑吧。

先看一下手表应用开发流程:

我的开发环境:Android Studio 2.2 Preview 3 ,Android Studio本身就有一个创建手表应用的向导,菜单File->New->New Project 然后填好应用名称及包名,选择下一步,这里是选择目标设备,要选择Wear,如下图:

选择下一步,如下图:

这里选择你要创建应用的类型.选择下一步,输入Activity及布局XML的名称,选择完成,Android Studio 的向导就会自动完成。

进入Activity里会发现:

public  class  MainActivity  extends  WearableActivity

MainActivity继承WearableActivity,WearableActivity是专门适用于手表设备的Activity基类,它继承至Activity,它支持了手表的息屏模式(也算省电模式的一种),息屏模式主要是通过WearableActivity的onEnterAmbient、onUpdateAmbient、onExitAmbient三个函数来实现。分别为进入息屏模式,更新息屏模式和退出息屏模式。要使用息屏模式需要设置setAmbientEnabled()。正常与息屏模式界面对比如下图:

onUpdateAmbient 这个调用通常会比较慢,华为手表为1分钟一次。

我们再来看一下Activity对应的布局XML,对于WearableActivity有一个新的布局类型:BoxInsetLayout,因为手表有方形和圆形的屏幕,它的强大之处就是可以用一个单一布局来适应两种屏幕。为了显示进这个区域,子View需要设定layout_box属性top、bottom、left和right,也可以结合使用。例如“left|top”,在方形屏幕中,layout_box属性会被忽略。layout_box=“all”的效果如下图:


二、开发环境手动搭建

上面系统自动生成的项目,不需要我们修改,直接编译后安装到手表就可以运行了。下面我们再来讲一下手动配置开发环境搭建(主要用于手机与手表需要通讯的情况)。考虑到手机与手表两个应用可能需要通讯,分别按手表侧及手机侧来讲。需要在两边加入对应的库。下面以华为手表中国版库为例来讲解。

手表侧:

这个与普通的Android 应用开发区别不大,需要注意在编译配置文件build.gradle中使用Android Wear库的版本要与手机侧版本相同,否则会出现版本不一致导致通讯失败(吐槽一下谷歌,通讯协议应该向下兼容吧),我开发是因为与华为手表做匹配,华为给的手机侧库为7.5(Android Wear 1.0),所以手表侧QQ音乐的Android Wear库也设置为7.5具体如下:

dependencies {
    …
    compile 'com.google.android.gms:play-services-wearable:7.5.0'}

手机侧:

手机需要先安装Android Wear中国版应用,这里要注意点,这个应用必须为Android Wear中国版,华为手表上第一次连接成功后,会在手表上提供这个应用的二维码,手机扫描安装这个应用就可以。使用的库必须是中国版本的,否则没法与手表通讯,这个中国版本的库由华为提供,我拿到的是play-services-wearable-standalone-7.5.0.aar,把它放到你的libs目录,需要在你手机应用的build.gradle中引用你的库,具体如下:

    repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
    …
    compile(name:'play-services-wearable-standalone-7.5.0',ext:'aar')
}

这里需要说明一下,你开发的应用包名,签名在手表与手机侧都必须一致才能通讯,否则无法通讯。

三、手表与手机通讯原理及开发

Android Wear手表应用与手机应用通讯可以有多种方式,有传统的方式,也有新的方式。

传统方式:通知

新引入方式:MessageApi,DataItem

传统方式:通知

这个是与手机通知栏生成的消息是一样的,可以通过Notification.Builder来创建。考虑到手表屏幕的特殊性(比如:一个通知可以有多条信息,允许添加可访问的动作等),也可以使用Android Wear 的扩展类WearableExtender,使用实例如下:

NotificationCompat.WearableExtender  wearableExtender = new NotificationCompat.WearableExtender();
wearableExtender
.addAction(Action)
.addPage(Notificaton);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(“My first notification”)
.setContentText(“My first message”)
.extend(wearableExtender)
.build();

新方式:连接服务

连接到手机或者手表需要用到GoogleApiClient这个类,通过设置监听,调用connect来实现,具体如下:

mGoogleApiClient = new GoogleApiClient.Builder(context)
      .addApi(Wearable.API)
      .addConnectionCallbacks(GoogleApiClient.ConnectionCallbacks)
      .addOnConnectionFailedListener(GoogleApiClient.OnConnectionFailedListener)
      .build();
mGoogleApiClient.connect();

接口:GoogleApiClient.ConnectionCallbacks用来确认连接是否成功,分别有以下两个回调接口:
Public  void  onConnected(Bundle bundle)-服务连接成功
public  void  onConnectionSuspended(int i)-服务连接中断
接口:GoogleApiClient.OnConnectionFailedListener用来连接失败的回调:
public  void  onConnectionFailed(ConnectionResult connectionResult)

新方式:连接设备

获取连接设备:
Wearable.NodeApi.getConnectedNodes(GoogleApiClient);
或者通过实现NodeApi.NodeListener的两个接口:
public void onPeerConnected(Node peer) –设备连接成功
public void onPeerDisconnected(Node peer)-设备连接失败
再然后通过Wearable.NodeApi.addListener(GoogleApiClient, NodeApi.NodeListener)来设置

新方式:发送数据

发送数据有两种方式:
Wearable.MessageApi.sendMessage(GoogleApiClient googleApiClient, String nodeId, String path, byte[] data)
Wearable.DataApi.putDataItem(GoogleApiClient googleApiClient, PutDataRequest request)

sendMessage来发送少量数据(data不能大于100K。大数据,比如:图片、文件等需要通过第二种方式来发送),主要参数含义如下:

  • Nodeid  这个是要发送数据的节点id
  • Path 这个路径,实际可以看这消息的类型
  • Data 你要发送的数据(不能大于100K)

putDataItem这个实际上是用来节点之间同步数据的。这里需要有个特别注意的地方,你相邻发送的两个数据一定要是变化的,对方才能接收到。所以在生成request时为了保证与之前数据不一样。通用常会request.getDataMap().putLong(KEY_DATA_ITEM_ID, new Date().getTime());参数request含义为要发送的数据,通常使用request.getDataMap().putXXX来加入数据

新方式:接收数据

对应发送数据,接收数据也有两种方式:
public void onMessageReceived(MessageEvent messageEvent)
public void onDataChanged(DataEventBuffer dataEventBuffer)
分别是通过继承:
DataApi.DataListener
MessageApi.MessageListener
再通过:
Wearable.DataApi.addListener(GoogleApiClient, DataListener);
Wearable.MessageApi.addListener(GoogleApiClient, MessageListener);
来设置

另外新方式对设备连接的监控,数据的接收等也可以通过继承 WearableListenerService 来统一处理,它继承于Service,是一个服务。具体接口如下:

  • public void onDataChanged(DataEventBuffer dataEvents)
  • public void onMessageReceived(MessageEvent messageEvent)
  • public void onPeerConnected(Node peer)
  • public void onPeerDisconnected(Node peer)

四、Android Wear 2.0中主要新增的功能

  1. 增加Wifi及3G/4G通讯功能,完全摆脱依赖手机
  2. 表盘可以显示自定义的内容

    上图显示了电量及照片

  3. 消息回复新增:智能回复、手写辨识和一整套英文全键盘这三种回复方式
  4. Wearable Navigation Drawer 应用功能箱(不知道翻译的对不对)
    这个功能是能在应用中加入一些类似功能按扭一样的东西,当用户进入应用后,把程序往下拉,就会出现,你可以选择相关功能操作,能极大方便快速跳到相关功能。

五、Android Wear应用发布

Android Wear应用如果是手表端一个独立的应用,可以直接发布。如果这个应用包括了手表与手机端,通常手表端的应用发布是与主版本一起打包发布,安装到手机后,如果与手表连接,则系统会自动安装到手表,具体步骤如下:

  1. 手机侧应用权限需要包含手表侧应用权限
  2. 将手表侧应用放到res/raw目录下面,假设取名:qqmusic_for_android_wear.apk
  3. 在手机侧应用创建包括手表侧应用的版本和路径信息的res/xml/qqmusic_for_android_wear_desc.xml文件
    <wearableApp package="wearable.app.package.name">
    <versionCode>1</versionCode>
    <versionName>1.0</versionName>
    <rawPathResId> qqmusic_for_android_wear</rawPathResId>
    </wearableApp>

    其中,package、versionCode和versionName需要和手表侧应用的AndroidManifest.xml中的值相同。rawPathResId是手表侧应用的名字,例如:qqmusic_for_android_wear.apk的resPathResId为qqmusic_for_android_wear。

  4. 在手机侧应用的AndroidManifest文件中的标签中增加来指明qqmusic_for_android_wear_desc.xml文件,如下设置:
    <meta-data android:name=”com.google.android.wearable.beta.app”
        android:resource="@xml/ qqmusic_for_android_wear_desc"/>

    这样编译并发布手机侧应用就可以了。

  5. 关掉Asset压缩
    许多编译工具会将res/raw目录下的文件压缩。由于应用包已经被压缩成zip格式,许多编译工具会再次压缩,致使手表侧应用安装程序不能正确处理,提示以下错误:PackageUpdateService: “this file cannot be opened as a file descriptor, it is probably compressed”。Android Studio默认不会再次压缩该手表侧应用,但是用其他编译工具需要注意这点。
时间: 2024-11-02 10:01:01

Android Wear开发的相关文章

想做Android Wear开发?你得先搞明白这四件事

    手环和手表的腕上穿戴之争,随着Apple Watch发布和Android Wear不断完善而告一段落.尽管续航上略有缺陷,但手表以其类似手机可扩展的生态环境赢得了众多巨头的支持. Google曾透露,Android Wear发布三周左右应用数就超过了Google Glass,并将有数以千计的app不断加入.Apple Watch发布的该月内,雷锋网驻硅谷的记者发现已有公司开始招聘相关开发者. 国外的开发者生态一向积极,国内虽明面上动静不大,但实际各家也已经都在暗自开动.鉴于Apple W

Android Wear计时器开发_Android

记得在2013年12月的时候,有系列文章是介绍怎么开发一个智能手表的App,让用户可以在足球比赛中记录停表时间.随着Android Wear的问世,在可穿戴设备中开发一款这样的App确实是个很不错的想法,但是按照目前对于Android Wear的架构了解来说,似乎有些困难.所以本系列文章我们就重写这个应用,带领大家进入Android Wear的世界. 本文不会长篇大论地讲解我们要开发的这款App的用途,因为我们在之前的系列文章已经深入了解过了.这么说吧,这是一个计时类应用,在比赛开始的时候开始执

Android Wear计时器开发

记得在2013年12月的时候,有系列文章是介绍怎么开发一个智能手表的App,让用户可以在足球比赛中记录停表时间.随着Android Wear的问世,在可穿戴设备中开发一款这样的App确实是个很不错的想法,但是按照目前对于Android Wear的架构了解来说,似乎有些困难.所以本系列文章我们就重写这个应用,带领大家进入Android Wear的世界. 本文不会长篇大论地讲解我们要开发的这款App的用途,因为我们在之前的系列文章已经深入了解过了.这么说吧,这是一个计时类应用,在比赛开始的时候开始执

Android Wear设计指南

本文由江南大学设计学院研究生卢孩翻译,查看原文 一种新形式需要一种新的UI设计模式.在较高层次上,Android的可穿戴设备UI主要由建议和询问这两个核心方面组成.应用程序在这两方面扮演重要的角色. 建议:信息情景 上下布局是一个垂直列表,列表中的每一条会显示有用的或及时的信息.就像现在Android手机和平板上的Google浏览器一样,用户垂直滑动界面,了解卡片的简要信息或是将对自己有用的东西查看更多.在屏幕上,一次只会显示一张卡片,而背景图片常常可以提供额外的可视化信息.应用程序可以创建卡片

新Android Wear发布

网易科技讯 北京时间6月26日凌晨消息,今日谷歌在旧金山举行I/O大会,会上Android工程部总监David Singleton登台介绍穿戴设备相关开发. Singleton通过LGG Watch智能手表展示Android Wear系统,智能手表通过振动提醒穿戴者有消息.来电.用户可上下滑动屏幕来翻页通知内容. 在现场Singleton展示了几个应用场景,比如可对智能手表说:"OK,Google,等我到家后提醒我查收信件."Android Wear将会自动创建提示通知信息.也可对智能

WatchKit对比Android Wear:南辕北辙还是殊途同归?

    苹果在11月19日发布了供开发者使用的WatchKit,从中我们可以看出Apple Watch的应用将会是什么样子,以及在苹果对这款智能手表的定位.但是它与竞争对手谷歌的Android Wear相比会有怎样的不同呢?雷穿戴(leiwear)采访了果壳电子软件副总裁于海东.映趣科技CEO王小彬和出门问问CEO李志飞来回答这个问题,结果发现有人觉得它们设计出发点是相同的,也有人觉得这是两个截然不同的东西. 王小彬在看过WatchKit的资料后表示最大的感觉是"watchkit为了方便用户操作

谷歌详解Android Wear:大大简化可穿戴产品交互

据国外媒体报道,在I/O开发者大会即将开幕之际,谷歌披露了更多有关Android Wear可穿戴产品界面如何运作的细节信息. 谷歌近日发布的一个YouTube视频对Android Wear软件开发工具包(SDK)进行了具体介绍.该工具包可让开发者改进现有应用,或者针对智能手表等腕戴设备打造全新的应用.数家硬件厂商已承诺开发搭载Android Wear系统的设备,如LG和摩托罗拉.二者已分别发布了G Watch和Moto 360智能手表. 谷歌首次谈到Android Wear是在今年3月.这是谷歌

Android Wear与Apple Watch交互设计对比

  [编按]本文作者林宜立,出门问问产品经理,文章首发36kr,雷锋网(公众号:雷锋网)转载已获作者授权.对智能手表有兴趣可以加入他们的Android Wear 智能手表QQ群369838318 苹果公司 11 月 18 日正式发布了WatchKit开发工具,揭开了 Apple Watch 交互逻辑和诸多 UI 元素细节.虽然目前 Apple Watch 真机尚未发布,但凭借官方的材料,我们已经能够更具体地感受和想象 Apple Watch 的用户体验了.和已经开售的安卓智能手表操作系统 And

Android Wear 上位:Google Glass 进冷宫

最近有关Google Glass的报道似乎总免不了负面消息,先是进军英国面临诸多限制,在今年的Google I/O上也几乎没有被提到,闪光灯都给了Google正式登场的Android Wear可穿戴平台,以及三款全新的智能手表,特别是Moto 360. 国外科技媒体Arstechnica的作者Ron Amadeo在体验了全新的Android Wear智能手表后认为Google Glass即将被大家遗弃,因为基本上Glass能做的手表都能做,而且手表没Glass的那些缺点.Amadeo是一名Gla