Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 藍牙低功耗(BLE)非常棒的工具類,獲取小米手環的步數

android 藍牙低功耗(BLE)非常棒的工具類,獲取小米手環的步數

編輯:關於Android編程

現在物聯網搞的轟轟烈烈的,小米的手環等一系列產品,下面我們就來研究一下小米手環的記步功能


工具類

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 bluetoothDeviceList = new ArrayList();

    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 bluetoothDeviceList);
    }

    /**
     * 得到BluetoothGatt
     * @param device 設備
     * @param autoConnect 是否自動鏈接
     * @param bluetoothGattCallback 回調
     */
    public BluetoothGatt getConnectGatt(BluetoothDevice device,boolean autoConnect,BluetoothGattCallback bluetoothGattCallback){
        return device.connectGatt(context, autoConnect, bluetoothGattCallback);
    }


}

初始化

//在onCreate中
//初始化UniversalBluetoothLE
universalBluetoothLE = UniversalBluetoothLE.inistance(MainActivity.this);

檢測是否打開藍牙並且請求系統打開藍牙

//檢測是否打開藍牙並且請求系統打開藍牙
universalBluetoothLE.openBbletooth();

鏈接設備

mBluetoothGatt=universalBluetoothLE.getConnectGatt(device,true,mGattCallback);
mBluetoothGatt.connect();

最後再實現一個GattCallback回調,搞定

看看小米的記步功能吧,完美獲取哦,有小米手環的可以測試哦,第三個是我的小米手環。

這裡寫圖片描述

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved