现在物联网搞的轰轰烈烈的,小米的手环等一系列产品,下面我们就来研究一下小米手环的记步功能
工具类
package com.zsl.bluetoothdemo.ble;import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.bluetooth.BluetoothGatt;import android.bluetooth.BluetoothGattCallback;import android.bluetooth.BluetoothManager;import android.content.Context;import android.content.Intent;import android.os.Handler;import java.util.ArrayList;import java.util.List;/** * 蓝牙的工具类 * Created by zsl on 15/5/25. */public class UniversalBluetoothLE { //UniversalBluetoothLE public static UniversalBluetoothLE universalBluetoothLE; private Context context; //BluetoothAdapter private BluetoothAdapter mBluetoothAdapter; //BluetoothManager private BluetoothManager bluetoothManager; //打开蓝牙的请求码 public static final int REQUEST_ENABLE_BLUETOOTH = 10010; //是否正在扫描蓝牙设备 private boolean mScanning; //设置扫描时长 private static final long SCAN_PERIOD = 10000; //蓝牙扫描的返回 BluetoothAdapter.LeScanCallback leScanCallback; //蓝牙设别的list List<BluetoothDevice> bluetoothDeviceList = new ArrayList<BluetoothDevice>(); Handler mHandler = new Handler(); LeScanListenter leScanListenter; private UniversalBluetoothLE(Context context) { this.context = context; //得到BluetoothManager this.bluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE); //得到BluetoothAdapter this.mBluetoothAdapter = bluetoothManager.getAdapter(); //蓝牙搜索的回调 leScanCallback = new BluetoothAdapter.LeScanCallback() { @Override public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) { bluetoothDeviceList.add(device); //返回所有列表 leScanListenter.leScanCallBack(bluetoothDeviceList); } }; } /** * 获得到UniversalBluetoothLE对象 * * @param context * @return */ public static UniversalBluetoothLE inistance(Context context) { if (universalBluetoothLE == null) { universalBluetoothLE = new UniversalBluetoothLE(context); } return universalBluetoothLE; } /** * 检查蓝牙是否打开并且启动打开蓝牙的方法 */ public void openBbletooth() { //判断蓝牙是否开启 if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) { //打开蓝牙 Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); context.startActivity(enableIntent); } } /** * 开始(true)或结束(false)蓝牙扫描 * * @param enable */ private void scanLeDevice(final boolean enable) { if (enable && mScanning == false) { mHandler.postDelayed(new Runnable() { @Override public void run() { mScanning = false; mBluetoothAdapter.stopLeScan(leScanCallback); } }, SCAN_PERIOD); mScanning = true; mBluetoothAdapter.startLeScan(leScanCallback); } else { mScanning = false; mBluetoothAdapter.stopLeScan(leScanCallback); } } /** * 开始搜索蓝牙设备 * * @param leScanListenter 搜索蓝牙设备的回调(返回设备列表) */ public void startScanLeDevice(final LeScanListenter leScanListenter) { bluetoothDeviceList.clear(); this.leScanListenter=leScanListenter; scanLeDevice(true); } /** * 停止搜索设备 */ public void stopScanLeDevice() { if (leScanCallback == null) return; scanLeDevice(false); } /** * 搜索蓝牙的回调 */ public interface LeScanListenter { void leScanCallBack(List<BluetoothDevice> bluetoothDeviceList); } /** * 得到BluetoothGatt * @param device 设备 * @param autoConnect 是否自动链接 * @param bluetoothGattCallback 回调 */ public BluetoothGatt getConnectGatt(BluetoothDevice device,boolean autoConnect,BluetoothGattCallback bluetoothGattCallback){ return device.connectGatt(context, autoConnect, bluetoothGattCallback); }}
初始化
//在onCreate中//初始化UniversalBluetoothLEuniversalBluetoothLE = UniversalBluetoothLE.inistance(MainActivity.this);
检测是否打开蓝牙并且请求系统打开蓝牙
//检测是否打开蓝牙并且请求系统打开蓝牙universalBluetoothLE.openBbletooth();
链接设备
mBluetoothGatt=universalBluetoothLE.getConnectGatt(device,true,mGattCallback);mBluetoothGatt.connect();
最后再实现一个GattCallback回调,搞定
看看小米的记步功能吧,完美获取哦,有小米手环的可以测试哦,第三个是我的小米手环。
测试apk | 点击下载
bithub | 欢迎Star