构建 Bluetooth 移动应用 主讲人 : 任凯 微信 :kaiser-tech 2016 年 5 月 6 日 3

Similar documents
状 态, 规 划 车 辆 行 驶 路 径, 可 进 入 网 站 充 电 服 务 栏 目 (2) 查 询 位 置 联 系 方 式 营 业 时 间 等 信 息, 可 进 入 网 站 服 务 指 南 栏 目 建 议 您 出 行 前 通 过 易 充 电 互 动 网 站 提 前 了 解 所 经 高 速 快 充

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

清华大学2013年毕业生就业质量报告

马 克 思 主 义 学 院 经 济 与 工 商 管 理 学 院 公 共 管 理 学 院 法 学 院 社 会 学 院 外 国 语 学 院 中 国 现 当 代 史 世 界 中 古 史 世 界 近 现 代 史 文 化 遗 产 马 克 思 主 义 哲 学 国 际 政 治 科 学 社 会 主 义 马 克 思

Microsoft Word - 01.DOC

Chapter 9: Objects and Classes

Chapter 9: Objects and Classes

第 一 节 项 目 概 况 一 项 目 背 景 2012 年 4 月 11 日, 国 家 发 改 委 发 布 贯 彻 落 实 国 务 院 决 定 战 略 性 新 兴 产 业 发 展 实 现 良 好 开 局 一 文, 文 章 指 出, 国 务 院 关 于 加 快 培 育 和 发 展 战 略 性 新 兴

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

摘 要 本 校 多 媒 體 設 計 系 與 上 海 戲 劇 學 院 創 意 學 院 在 多 次 聯 繫 交 流 之 下, 已 簽 署 合 作 備 忘 錄, 積 極 尋 求 兩 校 合 作 教 學 與 共 同 創 作 之 機 會 藉 由 本 系 學 生 作 品 腦 殘 公 寓 入 圍 第 五 屆 中

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基


untitled

标题

EJB-Programming-4-cn.doc

Microsoft Word zw

《大话设计模式》第一章

本 课 程 作 为 非 计 算 机 专 业 本 科 通 识 课 程, 是 一 门 理 论 和 实 践 紧 密 结 合 的 实 用 课 程, 内 容 包 括 计 算 机 基 础 部 分 和 程 序 设 计 部 分 计 算 机 基 础 部 分 涵 盖 计 算 机 软 硬 件 组 成 数 制 表 示 操

Java

目 录 第 一 章 调 查 介 绍 调 查 方 法 调 查 对 象 调 查 规 模 调 查 方 式 调 查 内 容 术 语 界 定... 4 第 二 章 报 告 概

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

chp6.ppt

南京市人才服务中心

建模与图形思考

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

3.1 num = 3 ch = 'C' 2

電機工程系認可證照清單 /7/1

中南大学第二届软件创新大赛

1.5招募说明书(草案)

中国ICT市场及重点行业月度报告

学 院 人 才 培 养 分 项 自 评 报 告 结 果 汇 总 表 主 要 评 估 指 标 关 键 评 估 要 素 自 评 等 级 1.1 学 校 事 业 发 展 规 划 合 格 1. 领 导 作 用 1.2 办 学 目 标 与 定 位 合 格 1.3 对 人 才 培 养 重 视 程 度 合 格 1

Microsoft Word - A _ doc

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

Microsoft Word - ch04三校.doc

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

第 一 部 分 广 州 市 人 力 资 源 和 社 会 保 障 局 概 况 一 广 州 市 人 力 资 源 和 社 会 保 障 局 主 要 职 能 ( 一 ) 贯 彻 执 行 国 家 和 省 市 人 力 资 源 和 社 会 保 障 事 业 发 展 的 法 律 法 规 和 方 针 政 策, 拟 订 本

JavaIO.PDF

开心消消乐还能这么玩?,开心消消乐隐藏关卡

《捕捉儿童敏感期》

2 國 文 考 科 試 題 解 析 命 題 出 處 與 南 一 版 第 五 冊 第 二 課 幽 夢 影 選 課 程 內 涵 同 試 題 解 析 某 君 講 信 用, 重 然 諾, 行 事 穩 健, 工 作 負 責 較 符 合 謹 飭 友 謹 飭 友 指 的 是 言 行 謹 慎 而 有 節 制 的 朋

untitled

29 碳 酸 钙 D3 片 ( 别 名 维 生 素 D3 碳 酸 钙 ) 吉 林 省 第 一 批 低 价 药 30 炔 诺 酮 滴 丸 吉 林 省 第 一 批 低 价 药 31 去 氯 羟 嗪 片 吉 林 省 第 一 批 低 价 药 32 茶 苯 海 明 片 吉 林 省 第 一 批 低 价 药 33

穨飲食與養老_決定版_.PDF

untitled

untitled

(Methods) Client Server Microsoft Winsock Control VB 1 VB Microsoft Winsock Control 6.0 Microsoft Winsock Control 6.0 1(a). 2

untitled

目 录 目 录 主 要 结 论... 5 一 网 站 绩 效 评 估 得 分 及 排 名 情 况... 5 二 网 站 建 设 总 体 成 效 及 存 在 问 题... 6 第 一 章 交 通 运 输 行 业 政 府 网 站 绩 效 评 估 背 景 一 中 办 国 办 要 求 各 级 政

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

项目标题

<4D F736F F D C4EABCC6CBE3BBFAB4F3C8FCCDA8D6AA E646F63>

浙江师范大学2014年度毕业生就业质量报告

目 录 监 管 资 讯 2016 年 全 国 保 险 监 管 工 作 会 议 召 开...3 协 会 动 态 赤 峰 保 险 行 业 协 会 召 开 数 据 统 计 和 信 息 宣 传 总 结 表 彰 会 议...5 赤 峰 市 保 险 行 业 协 会 秘 书 处 召 开 2015 年 度 述 职

同 时, 采 取 提 供 新 闻 线 索 和 素 材 安 排 专 访 等 方 式 主 动 为 新 闻 媒 体 服 务, 为 采 访 报 道 活 动 创 造 便 利 条 件 建 设 网 络 信 息 发 布 平 台 2013 年 9 月 开 通 中 央 纪 委 监 察 部 网 站,2015 年 1 月

公務員服務法第13條相關解釋彙整表

大陸教育部等6個部門公佈「現代職業教育體系建設規劃 ( 年)」規劃到2015年初步形成現代職業教育體系框架,到2020年基本建成「中國」特色現代職業教育體系

资 讯 速 递 台 基 于 大 数 据 的 学 校 督 导 评 估 系 统 建 设 上 海 市 闵 行 区 人 民 政 府 教 育 督 导 室 ( 摘 要 ) 闵 行 教 育 在 深 化 教 育 改 革 探 索 管 办 评 分 离 的 背 景 下, 把 教 育 督 导 评 估 系 统 建 设 作 为

B1

時間軸上的竹蓮記憶 學務主任 黃雅彙 我不是竹蓮國小的畢業校友 但對於身為新竹人的我來 說 仔細回想起來 似乎和竹蓮有著一種特別的緣分 對竹蓮國小最初的印象是在小學的時候 猶記得年幼的 我經過一段時日的啦啦隊舞蹈訓練後 老師便帶著我們從學 校步行到竹蓮國小來參加比賽 一踏入竹蓮校門 映入眼簾 的是黑

B1

Microsoft Word - 临政办发6.doc

EJB-Programming-3.PDF

ebook140-8

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

Guava学习之Resources

untitled

untitled

Microsoft PowerPoint - plan08.ppt

手机游戏运营手机游戏付费太简单 熊孩子点下是钱就划走了(全文 ...

untitled

ebook140-9

Microsoft Word - Learn Objective-C.doc

4 10% 90%

Livescribe+ 用户指南

北京达唯科技股份有限公司

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

財金資訊-83期.indd

1. 软 件 核 武 器 CTreeNode 基 本 原 理 以 下 详 细 介 绍 这 一 技 术 的 基 本 原 理 -CTreeNode 这 是 一 种 数 据 结 构, 类 似 于 CObject 存 在 于 内 存 中 1. 能 够 以 树 形 的 方 式 嵌 套 存 贮 非 常 复 杂

宣传册_预览

Learning Java

安友医疗科技(武汉)有限责任公司

pcdashboard.book

引 言 车 队 管 理 应 用 车 联 网 技 术 的 几 个 必 要 条 件 : 1 是 否 支 持 车 机 插 拔 报 警?( 绝 大 多 数 人 潜 意 识 中 对 被 监 控 和 被 管 理 是 抗 拒 的, 我 们 调 查 了 很 多 现 有 车 队 管 理 系 统, 管 理 者 最 头

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

2 WF 1 T I P WF WF WF WF WF WF WF WF 2.1 WF WF WF WF WF WF

epub83-1

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

BlackBerry Classic Smartphone-用户指南

一 公 司 特 殊 问 题 问 题 1 关 于 公 司 的 业 务 及 持 续 经 营 能 力 2013 年 度 2014 年 度 2015 年 1-11 月, 公 司 的 营 业 收 入 分 别 为 1,630, 元 699, 元 73, 元 报 告 期 内,

Microsoft Word - RHUB产品手册V5 1 2

声 明 和 承 诺 中 信 建 投 证 券 股 份 有 限 公 司 ( 以 下 简 称 本 独 立 财 务 顾 问 ) 受 浙 江 禾 欣 实 业 集 团 股 份 有 限 公 司 ( 以 下 简 称 禾 欣 股 份 或 上 市 公 司 ) 委 托, 担 任 本 次 重 大 资 产 购 买 交 易 事

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

javaexample-02.pdf

全国计算机技术与软件专业技术资格(水平)考试

<4D F736F F D20B5E3B5E3BFCD C4EAC4EAB6C8B1A8B8E6A3A D303033A3A9>

Bose : / 212 F (100 C) AA (IEC LR06) 統 Bose Corporation 32 F ~ 104 F (0 C ~ 40 C)

建立Android新專案

北京飞利信科技股份有限公司2015年第三季度报告全文

ii

Transcription:

构建 Bluetooth 移动应用 主讲人 : 任凯 kren@bluetooth.com 微信 :kaiser-tech 2016 年 5 月 6 日 3

无处不在 IOS ANDROID WINDOWS BLACKBERRY TIZEN 4

平台性能

平台 操作系统 操作系统版本 ios / Android / Windows / BlackBerry 10 / Tizen Android 4.3 / 4.4 / 5.0 / 6.0 等 蓝牙协议栈 4.0 / 4.1 / 4.2 硬件 SDK 芯片 Android Java / Android Native / Objective- C / Swift / Apache Cordova / Qt etc 6

性能变化示例 GAP 角色广播数据包内容服务模拟硬件性能语言和 API 中心 / 外围是 / 否 / 部分是 / 否多种 Java / C++ / JavaScript 7

平台性能指南 https://www.bluetooth.com/develop-with-bluetooth/developer-resources-tools/platform-capability-guide 8

基本流程

基本程序 设备发现? 10

广播和扫描 11

扫描 过滤和语法分析 要考虑耗电量! 考虑广播频率 过滤掉不相关的设备 对硬件进行有效的过滤? 对 AD 类型进行语法分析 行动! 12

Android 类 BluetoothManager BluetoothAdapter BluetoothLeScanner ScanCallback ScanFilter ScanSettings ScanResult BluetoothDevice ScanRecord 启动 配置 结果 13

android 配置和扫描 ScanCallback ScanFilter ScanSettings List<ScanFilter> filters = new ArrayList<ScanFilter>(); ScanFilter filter = new ScanFilter.Builder().setDeviceName("Flex").build(); filters.add(filter); ScanSettings settings = new ScanSettings.Builder().setScanMode( ScanSettings.SCAN_MODE_LOW_LATENCY).build(); scanner.startscan(filters, settings, scan_callback); 14

android 扫描结果 ScanResult ScanRecord BluetoothDevice private ScanCallback mlescancallback = new ScanCallback() { public void onscanresult(int callbacktype, final ScanResult result) { runonuithread(new Runnable() { public void run() { ScanRecord ad_packet = result.getscanrecord(); byte[] ad_bytes = ad_packet.getbytes(); AdvertisingPacket packet = new AdvertisingPacket(ad_bytes); adv_log.additem(packet); }}); 15

基本程序 设备发现 建立和维持连接 16

android 连接至设备 BluetoothDevice 通过扫描过程获得可能由用户选择 BluetoothGatt 在连接设备中获得启动蓝牙 GATT 操作 BluetoothGattCallback 通过回调函数来同步相关操作 17

android 扫描结果 ScanResult ScanRecord BluetoothDevice private ScanCallback mlescancallback = new ScanCallback() { public void onscanresult(int callbacktype, final ScanResult result) { runonuithread(new Runnable() { public void run() { ScanRecord ad_packet = result.getscanrecord(); byte[] ad_bytes = ad_packet.getbytes(); AdvertisingPacket packet = new AdvertisingPacket(ad_bytes); adv_log.additem(packet); }}); 18

android 连接至设备 // Extend BluetoothGattCallback public class GattCallbacks extends BluetoothGattCallback { } public void onconnectionstatechange(bluetoothgatt gatt, int status, int newstate) { } 19

android 连接至设备 BluetoothGatt bluetooth_gatt = device.connectgatt(this, true, gatt_callbacks); // after connecting we receive a call back to our BluetoothGattCallback object public void onconnectionstatechange(bluetoothgatt bluetooth_gatt, int status,int newstate) { } if (newstate == BluetoothProfile.STATE_CONNECTED) { observer.gattconnected(); } else if (newstate == BluetoothProfile.STATE_DISCONNECTED) { observer.gattdisconnected(); } 20

维持连接 API 访问连接参数? 否 应用层保持连接 是 设定超时时限 否 重新连接 21

基本程序 服务发现 建立和维持连接 使用 GATT 属性 22

属性协议 属性协议 GATT 客户端 GATT 服务器 23

属性协议 请求 回应 GATT 客户端 GATT 服务器 24

属性协议 通知 确认 GATT 客户端 GATT 服务器 25

属性协议 命令 GATT 客户端 GATT 服务器 无流程控制 服务器可投放命令 链路层的 ACK 确保不会丢失数据包 26

属性协议 通知 GATT 客户端 GATT 服务器 无流程控制 客户端可投放通知 链路层的 ACK 确保不会丢失数据包 27

更多 android 类 BluetoothGattService BluetoothGattCharacteristic BluetoothGattDescriptor BluetoothGatt BluetoothGattCallback 28

android 模拟服务 // call discoverservices on our BluetoothGatt object bluetooth_gatt.discoverservices(); // we'll get a call back when the operation completes public void onservicesdiscovered(bluetoothgatt bluetooth_gatt, int status) { } if (status == BluetoothGatt.GATT_SUCCESS) { List<BluetoothGattService> = bluetooth_gatt.getservices(); } 29

android 读出特征值 public static String ALERT_LEVEL_CHARACTERISTIC = "00002a06-0000-1000-8000-00805f9b34fb";... BluetoothGattService gatt_service;... BluetoothGattCharacteristic gatt_char = gatt_service.getcharacteristic (java.util.uuid.fromstring(characteristicuuid)); // this is an asynchronous operation bluetooth_gatt.readcharacteristic(gatt_char); 30

android 读出特征值 // callback in a BluetoothGattCallback sub-class public void oncharacteristicread(bluetoothgatt gatt, BluetoothGattCharacteristic gatt_char, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { // note we also have getstringvalue(), // getfloatvalue() and getintvalue() } } byte [] char_bytes = gatt_char.getvalue(); 31

android 启用通知 - 本地 public static String HEART_RATE_MEASUREMENT_CHARACTERISTIC = "00002a37-0000-1000-8000-00805f9b34fb"; BluetoothGattCharacteristic gatt_char = gatt_service.getcharacteristic (java.util.uuid.fromstring( HEART_RATE_MEASUREMENT_CHARACTERISTIC)); // Enable local notifications true means ON bluetooth_gatt.setcharacteristicnotification(gatt_char, true); 32

android 启用通知 - 远程 public static String CLIENT_CHARACTERISTIC_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; // Enable remote notifications BluetoothGattDescriptor descriptor = gatt_char.getdescriptor (UUID.fromString(Constants.CLIENT_CHARACTERISTIC_CONFIG)); descriptor.setvalue (BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); // this is an asynchronous operation bluetooth_gatt.writedescriptor(descriptor); 33

android 启用通知 本地 // in our BluetoothGattCallback sub-class public void oncharacteristicchanged( BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) { } // use the characteristic! 34

基本程序 服务发现 建立和维持连接 使用 GATT 服务 GAP 外围 /GATT 服务器 35

android GAP 外围 ADV 设置 AdvertiseSettings.Builder adv_sett_builder = new AdvertiseSettings.Builder().setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED).setConnectable(true).setTimeout(180000).setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM); 36

android GAP 外围 ADV 数据 String DEVICE_INFORMATION_SERVICE_UUID = "0000180A-0000-1000-8000-00805f9b34fb"; AdvertiseData.Builder adv_data_builder = new AdvertiseData.Builder().setIncludeDeviceName(true).addServiceUuid(new ParcelUuid(UUID.fromString(DEVICE_INFORMATION_SERVICE_UUID))); advertiser.startadvertising(adv_sett_builder.build(), adv_data_builder.build(), adv_cb); 37

android GATT 服务器 App BluetoothGattServer BluetoothGattService BluetoothGattCharacteristic 构建 addcharacteristic 构建 构建 addcharacteristic addservice 38

资源

应用加速器 智能入门套件 AdvScanner 2016 年 5 月 6 日 40

课程计划 41

官方社交媒体与网站 微信微博开发者门户 42

有问题? 微信 :kaiser-tech 微博 :@kaiser_ren Unthinkably Connected 2016 / Bluetooth 年 5 月 6 SIG 日专有文件 43