DIY智能插座(五) -- Android客户端

手机客户端主要涉及蓝牙编程,涉及到几个概念:

Service’s UUID : 标示服务类型,例如蓝牙打印服务、蓝牙音频传输服务、蓝牙串口服务,只有正确配置这个UUID,才能正常连接,对于蓝牙串口(SPP)服务,对应的UUID为:00001101-0000-1000-8000-00805F9B34FB

蓝牙主/从模式:蓝牙主设备一般可以连接多个设备,例如你的电脑、手机都是这样,而一般的设备,例如蓝牙耳机、蓝牙鼠标、蓝牙POS机等,都是作为从设备。主设备会主动发配对、连接请求,从设备响应这些请求。当然许多设备既可以做主,也可以做从,手机、电脑就是主从可以切换的。

知道这些概念就可以进行Android编程了,当然前提是你得会android编码 ~~

对于android蓝牙编程,只要搞熟悉了套路,还是so easy的,主要涉及几个类:

BluetoothAdapter:主要用于描述本机蓝牙适配器,封装了许多蓝牙状态信息、蓝牙操作(开、关、扫描等)
BluetoothDevice:对远端蓝牙设备的描述,例如MAC地址、设备名称、是否绑定等,都可以通过这个类获取
BluetoothServerSocket:作为服务端套接字,用来监听是否有数据接收
BluetoothSocket:蓝牙套接字,数据发送接收都是通过这个对象来实现,其实和网络编程都是比较类似的,很好理解。

由于蓝牙编程和网络编程类似,涉及到堵塞,所以需要和UI线程分离,用单独的线程实现蓝牙的数据收发。简要的编程步骤如下:

1)蓝牙适配器的获取:

BluetoothAdapter mBluetoothAdapter = null;
mBluetoothAdapter  = BluetoothAdapter.getDefaultAdapter();

2)连接到远端设备

//Name for the SDP record when creating server socket
private static final String NAME_SECURE = "BluetoothSecure";
private static final String NAME_INSECURE = "BluetoothInsecure";
//Service's UUID 
private static final UUID MY_UUID =
        UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); 

String address =  "A1:A2:A3:A4:A5:A6"; //对应远端MAC地址
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);//创建蓝牙设备
BluetoothSocket mmSocket;
mmSocket = device.createRfcommSocketToServiceRecord(MY_UUID); //安全方式连接
//mmSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);//非安全方式连接

 mmSocket.connect(); //开始连接

3)蓝牙监听(接受连接)

BluetoothServerSocket mmServerSocket;
InputStream mmInStream;
OutputStream mmOutStream;

mmServerSocket =mAdapter.listenUsingRfcommWithServiceRecord(NAME_SECURE, MY_UUID);//安全方式
//mmServerSocket = mAdapter.listenUsingInsecureRfcommWithServiceRecord(NAME_INSECURE, MY_UUID); //非安全方式

BluetoothSocket mmSocket = mmServerSocket.accept();  //开始监听

4)蓝牙读写

 InputStream mmInStream = mmSocket.getInputStream();  //输入流
 OutputStream mmOutStream = mmSocket.getOutputStream(); //输出流

  byte[] buffer = new byte[4096];
  int bytes = 0;                  
  Read from the InputStream
  bytes = mmInStream.read(buffer);  //将输入流读入buffer数组

  mmOutStream.write(buffer); //将buffer写到数据流

基本上蓝牙编程就按照这几步数来就行了,当然,由于蓝牙编程和Socket网络编程十分类似,会出现阻塞现象,所以不要放在UI线程,应该另起单独的线程完成上述操作。后面会放上完整的代码,里面有具体实现步骤。一般将这些后台数据操作的部分另起一个文件,作为一个Service也是挺好的。说完了蓝牙编程部分,简要看一下UI部分吧:

这里写图片描述 这里写图片描述

四个开关用ListView实现,点击菜单栏的“Connect a device”会弹出扫描界面,点击item,会获取MAC地址,然后会连接到该设备。程序在刚启动时,会发送状态请求码,即0x60(参看第一节),查询退出前的开关状态。为了避免每次开启程序时还要手动连接一次,可以将mac地址通过SharedPreferences的方式进行保存,开启程序后读取保存的mac字段,然后自动连接即可。

最后欣赏一下完成后的图片和视频演示吧~~~~
这里写图片描述

视频演示:
height="480" width="800" src="http://player.youku.com/embed/XMTY4MjIwNjYyOA==" allowfullscreen="">

附上Android Apk源代码地址:
https://github.com/lonely-geek/bluetooth-switch

智能插座 使用机智云开源APP之前,需要先在机智云开发平台创建您自己的产品和应用。 开源App需要使用您申请的AppId、AppSecret以及您自己的产品ProductKey才能正常运行。 具体申请流程请参见:http://docs.gizwits.com/hc/。 上述信息申请好之后,在代码中请找到"your_app_id"、"your_app_secret"、"your_product_key"字符串做相应的替换。 Gizwits Power Socket Android Demo App XPGWifiSDK 版本号 1.6.1.15123015 功能介绍 这是一款使用XPGWifiSDK的开源代码示例APP,可以帮助开发者快速入手,使用XPGWifiSDK开发连接机智云的物联APP。该APP针对的是智能家电中的插座类产品。包括了以下几点插座常用功能: ▪ 插座电源的开关插座定时开关插座倒计时开关 ▪ 定时周重复 如果开发者希望开发的设备与以上功能类似,可参考或直接使用该APP进行修改进行快速开发自己的智能家电App。 以下功能是机智云开源App的几个通用功能,除UI有些许差异外,流程和代码都几乎一致: ▪ 机智云账户系统的注册、登陆、修改密码、注销等功能 ▪ 机智云设备管理系统的AirLink配置入网、SoftAP配置入网,设备与账号绑定、解绑定,修改设备别名等功能 ▪ 机智云设备的登陆,控制指令发送,状态接收,设备连接断开等功能 另外,因为该项目并没有相对应的实体硬件设备供开发者使用,因此还提供了扫描虚拟设备功能,通过扫描机智云实验室内相对应的虚拟设备,可进行设备的绑定和控制等功能。同时可免费申请gokit进行设备的配置入网和绑定等流程。 项目依赖和安装 ▪ XPGWifiSDK的jar包和支持库 登录机智云官方网站http://gizwits.com的开发者中心,下载并解压最新版本的SDK。 下载后,将解压后的目录拷贝到复制到 Android 项目 libs 目录即可。 ▪ Gokit设备 使用机智云开发的Gokit设备并烧写相对应的产品标识码,可以体验设备配置上线等功能。 ▪ 虚拟设备 使用机智云实验室的相对应虚拟设备,可以体验设备指令收发,状态的获取等功能。 项目工程结构 ▪ 包结构说明 com.gizwits.powersocket -智能插座独有代码,包含控制部分和侧边栏部分 com.gizwits.powersocket.activity.control -智能插座控制界面activity com.gizwits.powersocket.activity.slipbar -智能插座侧边栏activity com.gizwits.framework -机智云设备开源APP框架,包含除控制界面Activity外的代码,暂时机智云实验室中的其他开源APP所用框架一致 com.gizwits.framework.activity -机智云设备开源APP框架相关activity com.gizwits.framework.adapter -机智云设备开源APP框架相关数据适配器 com.gizwits.framework.config -机智云设备开源APP框架配置类 com.gizwits.framework.entity -机智云设备开源APP框架实体类 com.gizwits.framework.sdk -机智云设备开源APP框架操作SDK相关类 com.gizwits.framework.utils -机智云设备开源APP框架工具类 com.gizwits.framework.widget -机智云设备开源APP框架自定义控件 com.gizwits.framework.XpgApplication -机智云设备开源APP框架自定义Application com.xpg.XXX -机智云通用开发API zxing -第三方二维码扫描控件 使用流程 ▪ 虚拟设备+app使用流程(体验指令发、状态获取等流程) 1.在机智云官网上注册并登录帐号 2.使用机智云实验室里面的智能插座启动虚拟设备 3.在app上注册并登录帐号 4.通过扫描网页上的二维码添加虚拟设备 5.进入控制界面与虚拟设备进行交互 ▪ gokit+app使用流程(体验配置、绑定实体设备等流程) 1.免费申请gokit,http://gizwits.com/zh-cn/gokit 2.下载gokit开源代码并按说明替换为智能插座的产品标识码 3.在app上注册并登录帐号 4.通过我要配置gokit按钮,使用Airlink或SoftAP模式配置gokit入网 5.绑定gokit 6.进入控制界面
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值