• Stars
    star
    568
  • Rank 78,502 (Top 2 %)
  • Language
    Java
  • License
    MIT License
  • Created over 9 years ago
  • Updated about 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

小米手环sdk

停止维护

非常抱歉! 因为官方app的'协议'不停的变动, 我自己本身又没有使用这个sdk的需求, 加上最近也比较忙, 所以不打算维护了. 如果你还是想继续捣鼓sdk, 可以参考我的一篇笔记 和 一个反编译的工程 对新版app的协议进行研究.

小米手环协议研究

小米app反编译工程

当前测试通过固件版本

小米运动app:

  • ios版本: 1.3.57
  • android: 1.8.711

普通版:(MI)

  • 固件版本: 4.16.11.7

心率版(MI1S)

  • 固件版本: 4.15.12.10
  • 心率版本: 1.3.74.64

##使用

在项目的build.gradle文件的依赖部分添加:

compile 'com.zhaoxiaodan.miband:miband-sdk:1.1.2'

Release Notes

1.1.2 - 2016-02-22

  • 修复setUserInfo导致的蓝牙断开问题. 当设置的userid跟之前设置的不一样时, 手环会闪动并震动, 这个时候需要拍一下手环, 就像官方app配对时一样;当设置的userid跟之前一样时 手环无反应;
  • 获取心跳扫描之前, 必须做setUserInfo 操作

1.1.1 - 2016-02-03

  • 支持获取心跳扫描数据

1.0.1 - 2015-11-20

  • 扫描附近的Le设备, 附近存在多个手环时可以选择连接
  • 添加设备断开监听器
  • 连接之后无需再setUserInfo也可以使用, 并且setUserInfo 会导致心跳版手环断开连接, 待修复
  • 修复震动问题, 现在有三种震动模式:三灯亮震2次, 无灯震2次, 中间灯震10次; 震动时可随时使用stop停止
  • 重力感应数据不可用
  • 心跳版好像是单色led灯, 无法设置led颜色; 原版可以

1.0.0 - 2015-08-17

  • 获取动力感应器数据
  • 设置用户信息
  • 获取实时步数通知
  • 震动手环
  • 设置led颜色
  • 获取电池信息
  • 获取信号强度RSSI值信息

API

// 实例化
MiBand miband = new MiBand(context);

// 扫描附近的设备
final ScanCallback scanCallback = new ScanCallback()
{
	@Override
	public void onScanResult(int callbackType, ScanResult result)
	{
		BluetoothDevice device = result.getDevice();
		Log.d(TAG,
				“找到附近的蓝牙设备: name:” + device.getName() + “,uuid:”
						+ device.getUuids() + “,add:”
						+ device.getAddress() + “,type:”
						+ device.getType() + “,bondState:”
						+ device.getBondState() + “,rssi:” + result.getRssi());
		// 根据情况展示
	}
};
MiBand.startScan(scanCallback);

// 停止扫描
MiBand.stopScan(scanCallback);

// 连接, 指定刚才扫描到的设备中的一个
miband.connect(device, new ActionCallback() {
						
	@Override
	public void onSuccess(Object data)
	{
		Log.d(TAG,"connect success");
	}
	
	@Override
	public void onFail(int errorCode, String msg)
	{
		Log.d(TAG,"connect fail, code:"+errorCode+",mgs:"+msg);
	}
});

// 设置断开监听器, 方便在设备断开的时候进行重连或者别的处理
miband.setDisconnectedListener(new NotifyListener()
{
	@Override
	public void onNotify(byte[] data)
	{
		Log.d(TAG,
				“连接断开!!!”);
	}
});

// 设置UserInfo, 心跳检测之前必须设置
// 当最后一个参数Type 为 1, 每次手环都会闪烁并震动, 这个时候, 需要拍一下手环, 以确认配对; 就像官方app 配对时一样
// 当 Type为0, 只有当设置的 userid 跟之前设置的不一样时, 才需要确认配对;
// 当 Type为0, 且 设置的 userid 跟之前一样时 手环无反应; 会在normal notify 收到一个值为3的通知

UserInfo userInfo = new UserInfo(20111111, 1, 32, 180, 55, "胖梁", 0);
miband.setUserInfo(userInfo);

// 设置心跳扫描结果通知
miband.setHeartRateScanListener(new HeartRateNotifyListener()
{
	@Override
	public void onNotify(int heartRate)
	{
		Log.d(TAG, "heart rate: "+ heartRate);
	}
});

//开始心跳扫描
miband.startHeartRateScan();

// 读取和连接设备的信号强度Rssi值
miband.readRssi(new ActionCallback() {
		
	@Override
	public void onSuccess(Object data)
	{
		Log.d(TAG, "rssi:"+(int)data);
	}
	
	@Override
	public void onFail(int errorCode, String msg)
	{
		Log.d(TAG, "readRssi fail");
	}
});

// 读取手环电池信息
miband.getBatteryInfo(new ActionCallback() {
		
	@Override
	public void onSuccess(Object data)
	{
		BatteryInfo info = (BatteryInfo)data;
		Log.d(TAG, info.toString());
		//cycles:4,level:44,status:unknow,last:2015-04-15 03:37:55
	}
	
	@Override
	public void onFail(int errorCode, String msg)
	{
		Log.d(TAG, "readRssi fail");
	}
});

//震动2次, 三颗led亮
miband.startVibration(VibrationMode.VIBRATION_WITH_LED);

//震动2次, 没有led亮
miband.startVibration(VibrationMode.VIBRATION_WITHOUT_LED);

//震动10次, 中间led亮蓝色
miband.startVibration(VibrationMode.VIBRATION_10_TIMES_WITH_LED);

//停止震动, 震动时随时调用都可以停止
miband.stopVibration();

//获取普通通知, data一般len=1, 值为通知类型, 类型暂未收集
miband.setNormalNotifyListener(new NotifyListener() {
		
	@Override
	public void onNotify(byte[] data)
	{
		Log.d(TAG, "NormalNotifyListener:" + Arrays.toString(data));
	}
});

// 获取实时步数通知, 设置好后, 摇晃手环(需要持续摇动10-20下才会触发), 会实时收到当天总步数通知
// 使用分两步:
// 1.设置监听器

miband.setRealtimeStepsNotifyListener(new RealtimeStepsNotifyListener() {
		
	@Override
	public void onNotify(int steps)
	{
		Log.d(TAG, "RealtimeStepsNotifyListener:" + steps);
	}
});

// 2.开启通知
miband.enableRealtimeStepsNotify();

//关闭(暂停)实时步数通知, 再次开启只需要再次调用miband.enableRealtimeStepsNotify()即可
miband.disableRealtimeStepsNotify();

//设置led颜色, 橙, 蓝, 红, 绿
miband.setLedColor(LedColor.ORANGE);
miband.setLedColor(LedColor.BLUE);
miband.setLedColor(LedColor.RED);
miband.setLedColor(LedColor.GREEN);

// 获取重力感应器原始数据, 需要两步
// 1. 设置监听器
miband.setSensorDataNotifyListener(new NotifyListener()
{
	@Override
	public void onNotify(byte[] data)
	{
		int i = 0;

		int index = (data[i++] & 0xFF) | (data[i++] & 0xFF) << 8;  // 序号
		int d1 = (data[i++] & 0xFF) | (data[i++] & 0xFF) << 8;    
		int d2 = (data[i++] & 0xFF) | (data[i++] & 0xFF) << 8;
		int d3 = (data[i++] & 0xFF) | (data[i++] & 0xFF) << 8;

	}
});

// 2. 开启
miband.enableSensorDataNotify();

// 配对, 貌似没啥用, 不配对也可以做其他的操作
miband.pair(new ActionCallback() {
	@Override
	public void onSuccess(Object data)
	{
		changeStatus("pair succ");
	}
	
	@Override
	public void onFail(int errorCode, String msg)
	{
		changeStatus("pair fail");
	}
});

More Repositories

1

MirServer-Go

传奇服务器Go语言实现
Go
74
star
2

xiaomi-health-app-decompile

小米运动app反编译, 用来研究小米手环协议
Java
70
star
3

MirServer-Delphi

传奇2服务器端源码, delphi版本
Pascal
64
star
4

ble-unlocker

指定蓝牙4.0设备, 远离Mac电脑时电脑自动锁定
Objective-C
62
star
5

android-anti-debug

android native工程反调试例子
Java
43
star
6

MirServer-Netty

学习Netty, 仿制Mir2服务器端
Java
42
star
7

apk_hack

Shell
24
star
8

pangliang.github.com

胖梁的技术笔记
JavaScript
18
star
9

MirServer-CNet

C#
13
star
10

cocos2dx_videoview_extends

cocos2dx 播放视频插件, 支持lua调用
Lua
12
star
11

ibrowser_plugin

iphone管理软件浏览器插件版 类似itools的ios管理软件, chrome, firefox浏览器插件版.
C
11
star
12

gp_manager

alfred workflow, manage github page
PHP
10
star
13

Cities-Skyline2-Mods

Some mod for Cities Skylines 2.
C#
9
star
14

android-hook-demo

dexposed原理学习
C++
9
star
15

answer-vibration

ios iphone 接通震动,挂断震动功能
Objective-C++
8
star
16

syncthing-ios

Objective-C
8
star
17

rk3128-rom

Groff
5
star
18

go-dao

orm extensions to golang's database/sql
Go
5
star
19

my-dockerfile

Dockerfile
4
star
20

futuopend-docker

Futu OpenAPI provides market data and trading services for programmed trading and help Quant dreams.
Shell
4
star
21

github-contributions-hack

github贡献伪装工具, just for fun !!
Shell
3
star
22

dexposed-patch

include files and libs for dexposed
C++
2
star
23

SRFC_CTRA

Live For Speed赛车游戏服务器插件, 跑圈赢积分等功能
Java
2
star
24

flink-connector-futuopend

Java
1
star
25

Cities2-Mod-EnableDeveloperMode

Example mod for Cities Skylines 2. Activates the DevMode by default with a mod instead.
C#
1
star
26

tianchi-mesh-agent

Java
1
star
27

cydia

ios cydia source site by myself
CSS
1
star
28

Cities2-Mod-ChangeWeather

C#
1
star