浅谈Wear OS应用开发–Tiles

Google 在Wear OS 2.0加入了一个新功能:Tiles(在中国版WearOS称作"卡片")。
多数用户使用手表平均抬腕时长不会超过5秒,所以手表上的信息必须容易查到,交互简单,且操作性强,这也就是Tiles诞生的原因。
Tiles是一种类似于小部件的UI,可以让用户以更便捷的方式获得需要的信息并完成操作。Tiles的入口是向左划动,并可多次划动快速进入某项功能。可通过手机APP端操控添加、删减、重新排序。
但不幸的是,Google在上线Tiles功能的同时并没有发布API,这意味着Tiles仅限于Google和部分合作伙伴使用。

好在一位叫Sterling Udell的大神从Wear OS应用程序中提取了相关的代码,并推断出了API,我们可以通过此API创建出属于我们自己的Tiles。(这个API无疑是非官方的,但它能够使用Wear官方的系统级hooks创建和更新手表上的Tiles)

具体有关Tiles的详细说明、使用教程及非官方API可查阅https://bitbucket.org/StringMon/unofficialtileapi/src/main/,

我写了个简单的Tiles Demo供大家参考

效果图:


关于一些关键代码的说明:

所有Tile特有的方法都传递了一个int类型参数,即Tile ID。这些ID可能会在添加Tile时按顺序分配,且在Tile的整个生命周期中保持不变,不会被重新使用。

public void onTileUpdate(int TileId)
在首次添加或启动Tile,以ID作为其参数时,似乎会调用此方法一次。此后有时则会以大的负数(不是你的Tiles ID)作为参数来调用它,但是这些参数并不一致,目前含义不明。

public void onTileFocus(int TileId)
在用户即将滑动到Tile上调用(在Tile出现之前)

public void onTileBlur(int TileId)
在用户离开你的Tile时调用

TileData.Builder
这是一个基本的构建器类,可将RemoteViews通过Bundle发送。

关键代码:

MyTileProviderService

package com.yearky.tile;import android.app.*;
import android.content.*;
import android.util.*;
import android.view.*;
import android.widget.*;
import com.google.android.clockwork.tiles.*;import static com.yearky.tile.WearableActivity.TAG;public class MyTileProviderService extends TileProviderService
{private int id = -5;public MyTileProviderService(){}@Overridepublic void onTileUpdate(int tileId){tileId  =  id ;Log.d(TAG, "from tile" + tileId);}@Overridepublic void onTileFocus(int tileId){//在用户滑动到你的Tile(在中国版WearOS上称为"卡片")上时会被调用Log.d(TAG, "onTileFocus() called with: tileId = [$tileId]");id = tileId ;sendRemoteViews();}/*@Overridepublic void onTileBlur(int tileId){//在用户离开你的Tile时会被调用}*/private void sendRemoteViews(){Log.d(TAG, "sendRemoteViews");RemoteViews remoteViews = new RemoteViews(this.getPackageName(), R.layout.tile);TileData.Builder bob = new TileData.Builder();//在这里更新你的Tile界面Intent intent = new Intent(this, WearableActivity.class);PendingIntent pendingIntent  = PendingIntent.getActivity(this, 0,intent, PendingIntent.FLAG_UPDATE_CURRENT);remoteViews.setOnClickPendingIntent(R.id.tileButton1, pendingIntent);//点击Button跳转到WearableActivitybob.setRemoteViews(remoteViews);sendUpdate(id, bob.build());}}

WearableActivity

package com.yearky.tile;import android.app.*;
import android.os.*;public class WearableActivity extends Activity
{public static final String TAG = "XXX";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_wearable);}
}

tile.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"><TextView
android:layout_width="wrap_content"  android:layout_height="wrap_content"
android:text="Hello World"
Android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#FFFFFFFF"/>   <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一个卡片"
android:textColor="#FFFFFFFF"/>   <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮测试"
android:id="@+id/tileButton1"/>
</LinearLayout>

在AndroidManifest中声明

 <service
android:name=".MyTileProviderService"
android:exported="true"
android:icon="@drawable/ic_launcher"
android:label="卡片测试"
android:permission="com.google.android.wearable.permission.BIND_TILE_PROVIDER">                                                                 <intent-filter>                                                                   <action
android:name="com.google.android.clockwork.ACTION_TILE_UPDATE_REQUEST" />
</intent-filter>
</service>

完整Demo(适用于AIDE):
https://alone127.lanzous.com/ikwSJlsqh1i

关于Wear OS应用开发–Tiles我所了解的一些内容(附Demo)相关推荐

  1. iOS蓝牙开发---CoreBluetooth[BLE 4.0] 初级篇[内附Demo地址]

    一.蓝牙基础知识 (一)常见简称 1.MFI  make for ipad ,iphone, itouch 专们为苹果设备制作的设备,开发使用ExternalAccessory 框架(认证流程貌似挺复 ...

  2. C#开发微信公众平台-就这么简单(附Demo)(转)

    原文:http://www.cnblogs.com/xishuai/p/3625859.html 写在前面 阅读目录: 服务号和订阅号 URL配置 创建菜单 查询.删除菜单 接受消息 发送消息(图文. ...

  3. C#开发微信公众平台-就这么简单(附Demo)

    相关文档:https://www.google.com/search?site=&source=hp&q=C%23+%E5%BE%AE%E4%BF%A1%E5%BC%80%E5%8F% ...

  4. 谷歌逐梦穿戴圈:Wear OS的失败能够靠Pixel Watch挽回吗?

    在中国人的习俗里,名字往往与运势挂钩,所以常常会有改名转运这样的神秘玄学.不过这一"玄学"在谷歌推出的智能手表操作系统Wear OS身上,显然没有起到作用.2014年出道的Andr ...

  5. Wear OS 简介

    文章目录 概述 与 Android 区别 Wear OS 设备开发申请流程 Wear OS 常用模式介绍 概述 Wear OS 是基于 Android 模块化的轻量级的穿戴设备平台, 本质是 Andr ...

  6. 2018android wear手表,谷歌正开发三款智能手表 Wear OS系统逐步脱离Android范畴

    描述 谷歌推出了Android系统影响了整个智能手机行业,现在该系统在手机业务上的市场占比已经接近90%.基于Android谷歌还开发了Android Wear系统,主要是针对穿戴设备尤其是智能手表. ...

  7. Wear OS手表应用开发教程之-滑动隐藏布局-SwipeDismissFrameLayout

    本文目录 点击直达 Wear OS手表应用开发系列教程 点击直达 本文标签 `路过的年轻人啊,你是要用左手点个赞呢,还是要右手点个关注呢` 前言: 利弊解析: 效果展示: 使用方法: 结语: 最后我还 ...

  8. Wear OS手表应用开发教程之-创建应用

    本文目录 点击直达 Wear OS手表应用开发系列教程 点击直达 本文标签 `路过的年轻人啊,你是要用左手点个赞呢,还是要右手点个关注呢` 前言: Android Studio自动创建: 创建应用: ...

  9. Wear OS手表应用开发教程之-监听手表按键以及获取按键信息-WearableButtons

    本文目录 点击直达 Wear OS手表应用开发系列教程 点击直达 本文标签 `路过的年轻人啊,你是要用左手点个赞呢,还是要右手点个关注呢` 前言: 获取按键信息: 获取按键数量 获取按键信息 获取按键 ...

最新文章

  1. java dump分析工具_Java虚拟机详解(八)------虚拟机监控和分析工具(2)——可视化...
  2. 使用 commander inquirer 构建专业的node cli
  3. python知识点汇总_Python知识点总结大全(一)
  4. texture 纹理(贴图)
  5. ReactJs 第二章 JSX
  6. ASP.NET笔记(二)
  7. Sitecore开发 IP地理定位服务入门
  8. 【架构解密】第六章 深入解析分布式存储
  9. 你抢购盐干什么?要抢购也是先选大米啊
  10. 微信小程序实现扫码登录网站
  11. 美妆类短视频如何定位?可以考虑三个方向,吸粉引流指日可待
  12. html隐藏域倒计时,一个网页倒计时的实现
  13. 点桌面计算机一直在加载,Win7系统在桌面点右键一直转圈的解决方法
  14. UC手机浏览器js加入收藏夹
  15. unity 神笔画画
  16. word插入和删除水印
  17. Mahout in action 中文版-3.推荐器的数据表达
  18. 【python】王者荣耀全英雄高清壁纸爬虫共467M(多线程)
  19. mbedtls 库基础及其应用
  20. Aurora8B10B IP使用 -04- IP例程应用实例

热门文章

  1. Linux常用命令笔记与Windows部分命令
  2. 手机邮箱看不到已发送邮件_TP5实现邮件发送(PHP 利用QQ邮箱发送邮件「PHPMailer」) - blog_zss小帅-博客猿...
  3. 浙江远程c语言答案,北语远程0609计算机 C语言 大学英语2 数字电路 答案
  4. HP C6602A墨盒驱动
  5. 天融信: 风险探知系统确保企业资产无虞
  6. vivo小游戏sdk对接 Laya(5分钟掌握)
  7. C盘没装多少东西,为什么会卡?
  8. 站外SEO从反向链接开始
  9. 新斗罗大陆手游服务器维护,《新斗罗大陆》新ss魂师天青龙牛天修复公告
  10. 游戏引擎架构【笔记一】