@Override
        public void onReceive(Context context, Intent intent) {
          final String action = intent.getAction();

          Log.d(TAG, "receive BLE Action :" + action);
          if (BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) {
            // 发现蓝牙服务,这时可以发送数据
            //	tv_log.append("发现蓝牙服务完成,发送同步时间命令\n");
            //	mBluetoothLeService.setSynTime();

            tv_log.append("发现蓝牙服务完成,发送获取设备WatchID命令\n");
            mBluetoothLeService.getWatchId();

          } else if (BluetoothLeService.ACTION_GATT_SERVICES_TIMEOUT.equals(action)) {
            // 蓝牙通讯超时,这里可以重发未响应的命令
            tv_log.append("蓝牙命令超时.......\n");

          } else if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)) {
            // 蓝牙断开
            tv_log.append("蓝牙连接断开.......\n");

          } else if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) {
            // 接收到蓝牙数据

            byte[] bytes = intent.getByteArrayExtra(BluetoothLeService.EXTRA_DATA);
            tv_log.append("接收到数据:" + ProtocolParser.bytes2HexString(bytes) + "\n");

            pasrseData(bytes);
          }
        }
  protected void pasrseData(byte[] bytes) {

    if (null == bytes) return;

    if (bytes.length == 5
        && bytes[0] == 0x6e
        && bytes[1] == 0x01
        && bytes[2] == 0x00
        && bytes[4] == (byte) 0x8f) {
      // 电量返回的结果

    } else if ((bytes.length == 6)
        && bytes[0] == 0x6e
        && bytes[1] == 0x01
        && bytes[2] == 0x01
        && bytes[5] == (byte) 0x8f) {
      // 响应消息应答,具体看通讯协议

      tv_log.append(
          "解析数据 收到应答 ,命令码:  0x"
              + String.format("%02x", bytes[3])
              + "     结果: "
              + showResult(bytes[4])
              + "\n");

      switch (bytes[3]) {
        case 0x15: // 时间时间返回
          tv_log.append("设置12小时制,Km显示\n");
          mBluetoothLeService.setTimeType(false, true, false, false, 0); // 设置12小时制,Km显示

          break;

        case 0x34: // 时间格式和距离单位设置返回
          tv_log.append("删除7:10分的一个提醒\n");
          mBluetoothLeService.deleteAReminder(7, 10); // 删除7:10分的一个提醒

          break;

        case 0x09: // 删除提醒返回
          tv_log.append("添加一个 7:10清醒的提醒(星期一和星期三)\n");
          mBluetoothLeService.addAReminder(4, 7, 10, "00000011"); // 添加一个 7:10清醒的提醒(星期一和星期三)

          break;

        case 0x40: // 添加提醒返回
          tv_log.append("设置 个人信息   男  19880214, 身高170  体重60\n");
          mBluetoothLeService.SynPersonData(0, 1988, 2, 14, 170, 60);
          // 设置 个人信息   男  19880214, 身高170  体重60

          break;

        case 0x0c: // 设置个人信息返回
          tv_log.append("设置目标10000步\n");
          mBluetoothLeService.setGoalSteps(10000);
          // 设置目标10000步
          break;

        case 0x32:
          tv_log.append("获取当日运动汇总\n");
          mBluetoothLeService.getSportDataTotal();
          break;

        case 0x0d: // 目标设置完成
          tv_log.append("设置自动删除数据模式\n");
          mBluetoothLeService.setManualMode(3);
          break;

        case 0x06: // 运动详细数据传输完成返回
          tv_log.append("获取运动详细数据完成\n");

          break;
        default:
          break;
      }

    } else if (bytes.length == 24
        && bytes[0] == 0x6e
        && bytes[2] == 0x04
        && bytes[23] == (byte) 0x8f) {

      tv_log.append("获取的DN号为:" + ProtocolParser.parseDeviceDN(bytes) + "\n");
      tv_log.append("发送同步时间命令\n");
      mBluetoothLeService.setSynTime();

    } else if (bytes.length == 20
        && bytes[0] == 0x6e
        && bytes[1] == 0x01
        && bytes[2] == 0x0F
        && bytes[19] == (byte) 0x8f) {
      // 运动汇总数据返回
      SportsData sData = ProtocolParser.parseSportTotalData(bytes);

      if (null == sData) {
        tv_log.append("获取运动汇总数据为空\n");

      } else {

        tv_log.append("获取运动汇总数据:  步数:" + sData.steps + " ,卡路里: " + sData.cal + " \n");
      }

      tv_log.append("获取运动明细数据..\n");
      mBluetoothLeService.getSportDataDetail(); // 获取运动明细数据
    } else if ((bytes.length == 21
            && bytes[0] == 0x6e
            && bytes[2] == 0x05
            && bytes[20] == (byte) 0x8f) // L28S/C返回
        || (bytes.length == 19
            && bytes[0] == 0x6e
            && bytes[2] == 0x05 // L11/L28T/W/H 返回
            && bytes[18] == (byte) 0x8f)) {

      // 运动详细数据返回

      SportsData sData = ProtocolParser.parseSportDetailData(bytes);

      if (null == sData) {
        tv_log.append("获取运动详细数据为空\n");

      } else {

        tv_log.append("获取运动详细数据:  步数:" + sData.steps + " ,卡路里: " + sData.cal + " \n");
      }
    }
  }