浏览代码

1,更新依赖库

2,增加营养秤
2,增加跳绳界面
master
陈福行 3 年前
父节点
当前提交
e90e5bd6e1
共有 67 个文件被更改,包括 2764 次插入522 次删除
  1. 5
    4
      app/build.gradle
  2. 5
    4
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ADWeightScaleCmdActivity.java
  3. 1
    1
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ADWeightScaleUserActivity.java
  4. 438
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BLDWeightScaleBleActivity.java
  5. 3
    2
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BabyBodyFatCmdActivity.java
  6. 4
    3
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BabyCmdActivity.java
  7. 86
    17
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BleCmdActivity.java
  8. 1
    2
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BloodGlucoseActivity.java
  9. 4
    3
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BloodOxygenActivity.java
  10. 6
    10
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BloodSugar4GActivity.java
  11. 2
    2
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BroadcastBloodOxygenActivity.java
  12. 3
    3
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BroadcastScaleActivity.java
  13. 5
    4
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ClearShakeHandsActivity.java
  14. 6
    6
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ConnectBleTestActivity.java
  15. 6
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/EightBodyfatActivity.java
  16. 8
    6
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/HeightCmdActivity.java
  17. 5
    4
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/HeightWeightScaleActivity.java
  18. 63
    7
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/MainActivity.java
  19. 226
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/RopeSkippingActivity.java
  20. 18
    1
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ShowBleActivity.java
  21. 12
    17
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/SkateboardDataActivity.java
  22. 5
    4
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/SmartMaskActivity.java
  23. 2
    2
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/SphyCmdActivity.java
  24. 5
    4
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TempCmdActivity.java
  25. 8
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TempGunCmdActivity.java
  26. 4
    3
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TempHumidityActivity.java
  27. 5
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TestCmdActivity.java
  28. 2
    2
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ToothBrushWifiBleActivity.java
  29. 8
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TpmsConnectCmdActivity.java
  30. 16
    10
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TransmissionActivity.java
  31. 8
    4
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WeightScaleBleActivity.java
  32. 119
    62
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WeightScaleWifiBleActivity.java
  33. 5
    6
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WifiConfigActivity.java
  34. 0
    1
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/base/BleAppBaseActivity.java
  35. 1
    1
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/base/BleBaseActivity.java
  36. 16
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/config/BleDeviceConfig.java
  37. 3
    1
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/AddUserDialog.java
  38. 2
    1
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/DialogStringImageAdapter.java
  39. 1
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/HintDataDialogFragment.java
  40. 1
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/LoadingIosDialogFragment.java
  41. 4
    3
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/ShowListDialogFragment.java
  42. 2
    1
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/WifiDialog.java
  43. 2
    2
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/find/FindDeviceActivity.java
  44. 2
    1
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/find/FindDeviceAdapter.java
  45. 4
    4
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/find/FindDeviceNewActivity.java
  46. 329
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/ble_nutrition/BleNutritionActivity.java
  47. 2
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/blood_glucose/BloodGlucoseActivity.java
  48. 2
    2
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/blood_glucose/BloodGlucoseTestActivity.java
  49. 2
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/broadcast_height/BroadcastHeightActivity.java
  50. 222
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/broadcast_nutrition/BroadNutritionActivity.java
  51. 2
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/coffee_scale/CoffeeScaleActivity.java
  52. 2
    2
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/food_temp/FoodTempActivity.java
  53. 2
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/share_charger/ShareChargerActivity.java
  54. 2
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/share_condom/ShareCondomActivity.java
  55. 2
    5
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/share_socket/ShareSocketActivity.java
  56. 101
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/utils/EightBodyFatAlgorithms.java
  57. 335
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/utils/EightBodyFatBean.java
  58. 0
    110
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/utils/MyBleStrUtils.java
  59. 37
    1
      app/src/main/res/layout/activity_ble.xml
  60. 154
    0
      app/src/main/res/layout/activity_ble_nutrition.xml
  61. 42
    0
      app/src/main/res/layout/activity_broadcast_nutrition.xml
  62. 7
    7
      app/src/main/res/layout/activity_health_bracelet.xml
  63. 25
    0
      app/src/main/res/layout/activity_main.xml
  64. 113
    0
      app/src/main/res/layout/activity_rope_skipping.xml
  65. 1
    1
      app/src/main/res/layout/activity_show_ble.xml
  66. 24
    1
      app/src/main/res/layout/activity_test_ota.xml
  67. 226
    140
      app/src/main/res/layout/activity_weight_scale_wifi_ble.xml

+ 5
- 4
app/build.gradle 查看文件

@@ -32,13 +32,14 @@ android {

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.12'
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.8.0'//蓝牙核心库
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.8.6'//蓝牙核心库
implementation 'com.github.elinkthings:AILinkSDKOtaLibraryAndroid:1.0.3'//OTA库,需要依赖核心库
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.6.1'//蓝牙解析库
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.6.2'//蓝牙解析库
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'com.jakewharton:butterknife:10.2.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0'
api 'com.squareup.retrofit2:converter-gson:2.5.0'
}

+ 5
- 4
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ADWeightScaleCmdActivity.java 查看文件

@@ -28,12 +28,12 @@ import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleDensityUtil;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.ADWeight.ADWeightScaleBleConfig;
@@ -43,10 +43,11 @@ import cn.net.aicare.modulelibrary.module.ADWeight.ADWeightScaleDeviceData;
import cn.net.aicare.modulelibrary.module.ADWeight.ADWeightScaleUserData;



/**
* xing<br>
* 2019/7/12<br>
* 艾地体脂秤
* 显示数据
*/
public class ADWeightScaleCmdActivity extends BleBaseActivity implements OnCallbackBle, OnBleVersionListener, OnMcuParameterListener, OnBleCompanyListener, OnBleSettingListener,
ADWeightScaleDeviceData.onNotifyData, View.OnClickListener, RadioGroup.OnCheckedChangeListener {
@@ -627,7 +628,7 @@ public class ADWeightScaleCmdActivity extends BleBaseActivity implements OnCallb
}

@Override
public void OnSettingReturn(byte cmdType, byte cmdData) {
public void OnSettingReturn(int cmdType, int cmdData) {
String msg = "";
switch (cmdType) {
case CmdConfig.SET_SYS_TIME://设置系统当前时间返回

+ 1
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ADWeightScaleUserActivity.java 查看文件

@@ -26,7 +26,7 @@ import cn.net.aicare.modulelibrary.module.ADWeight.ADWeightScaleUserData;
/**
* xing<br>
* 2019/11/14<br>
* 艾地体脂秤用户管理界面
* java类作用描述
*/
public class ADWeightScaleUserActivity extends AppCompatActivity implements View.OnClickListener {


+ 438
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BLDWeightScaleBleActivity.java 查看文件

@@ -0,0 +1,438 @@
package aicare.net.cn.sdk.ailinksdkdemoandroid;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.RadioButton;

import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.bean.SupportUnitBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;

import cn.net.aicare.modulelibrary.module.BLDBodyfatScale.BLDBodyFatBleUtilsData;
import cn.net.aicare.modulelibrary.module.BLDBodyfatScale.BLDBodyFatDataUtil;
import cn.net.aicare.modulelibrary.module.BLDBodyfatScale.BLDUser;

public class BLDWeightScaleBleActivity extends BleBaseActivity implements View.OnClickListener, OnCallbackBle, BLDBodyFatBleUtilsData.BleBodyFatCallback {
private String TAG = BLDWeightScaleBleActivity.class.getName();
private String mAddress;
private List<String> mlogList;

private ArrayAdapter listAdapter;

private BLDBodyFatBleUtilsData bodyFatBleUtilsData;
private MHandler mMHandler;

private RadioButton kg, jing, stlb, lb;

private BLDUser selectUser;

private ListView loglistView;
private int weighunit = BLDBodyFatDataUtil.WeightUnit.KG;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bld_weight_scale_ble);
initView();
setUnitinit();
initdata();


}

private void initView() {

kg = findViewById(R.id.kg);
jing = findViewById(R.id.jin);
stlb = findViewById(R.id.st_lb);
lb = findViewById(R.id.lb);

kg.setChecked(true);
loglistView = findViewById(R.id.log_list);


}

private void initdata() {
mAddress = getIntent().getStringExtra("mac");

WeakReference weakReference = new WeakReference(new MHandler());
mMHandler = (MHandler) weakReference.get();

mlogList = new ArrayList<>();
listAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mlogList);
loglistView.setAdapter(listAdapter);


selectUser = getdefault();


}

private BLDUser getdefault() {
BLDUser user = new BLDUser();
user.setModeType(BLDBodyFatDataUtil.UserEum.MODE_ORDINARY);
user.setSex(BLDBodyFatDataUtil.UserEum.SEX_MAN);
user.setAge(18);
user.setHeight(170);
user.setAdc(560);
user.setWeight(50);
user.setId(1);
return user;
}

private void setUnitinit() {
kg.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
weighunit = BLDBodyFatDataUtil.WeightUnit.KG;
if (bodyFatBleUtilsData != null)
bodyFatBleUtilsData.sendData(BLDBodyFatDataUtil.getInstance().setWeightUnit(
BLDBodyFatDataUtil.WeightUnit.KG));
}
}
});
jing.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
weighunit = BLDBodyFatDataUtil.WeightUnit.JIN;
if (bodyFatBleUtilsData != null)
bodyFatBleUtilsData.sendData(BLDBodyFatDataUtil.getInstance().setWeightUnit(BLDBodyFatDataUtil.WeightUnit.JIN));
}
}
});
stlb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
weighunit = BLDBodyFatDataUtil.WeightUnit.ST;
if (bodyFatBleUtilsData != null)
bodyFatBleUtilsData.sendData(BLDBodyFatDataUtil.getInstance().setWeightUnit(BLDBodyFatDataUtil.WeightUnit.ST));
}
}
});
lb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
weighunit = BLDBodyFatDataUtil.WeightUnit.LB;
if (bodyFatBleUtilsData != null)
bodyFatBleUtilsData.sendData(BLDBodyFatDataUtil.getInstance().setWeightUnit(BLDBodyFatDataUtil.WeightUnit.LB));
}
}
});
}

@Override
public void onServiceSuccess() {
mlogList.add(0, "服务与界面建立连接成功");
mMHandler.sendEmptyMessage(ToRefreUi);
// BleLog.i(TAG, "服务与界面建立连接成功");
//与服务建立连接
if (mBluetoothService != null) {
mBluetoothService.setOnCallback(this);
BleDevice bleDevice = mBluetoothService.getBleDevice(mAddress);
if (bleDevice != null) {
BLDBodyFatBleUtilsData.init(bleDevice, this);
bodyFatBleUtilsData = BLDBodyFatBleUtilsData.getInstance();
bodyFatBleUtilsData.sendData(BLDBodyFatDataUtil.getInstance().getVersion());
mMHandler.sendEmptyMessageDelayed(GETLIST, 200);
mMHandler.sendEmptyMessageDelayed(GETLIST, 300);


}
}
}


@Override
public void onServiceErr() {
mlogList.add(0, "服务与界面建立连接出错");
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void unbindServices() {
mlogList.add(0, "服务与界面建立断开连接成功");
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onStartScan() {
mlogList.add(0, "开始扫描");
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onScanning(BleValueBean data) {
mlogList.add(0, "扫描中");
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onScanTimeOut() {
mlogList.add(0, "扫描超时");
mMHandler.sendEmptyMessage(ToRefreUi);
}


@Override
public void onConnecting(String mac) {
mlogList.add(0, "正在连接" + mac);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onDisConnected(String mac, int code) {
mlogList.add(0, "断开连接" + mac);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onServicesDiscovered(String mac) {
mlogList.add(0, "发现蓝牙服务" + mac);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void bleOpen() {
mlogList.add(0, "蓝牙打开");
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void bleClose() {
mlogList.add(0, "蓝牙关闭");
mMHandler.sendEmptyMessage(ToRefreUi);
}


@Override
public void onWeightData(int status, int symbol, int weight, int weightUnit, int decimals) {
String symbolStr = symbol == BLDBodyFatDataUtil.Symbol.MINUS ? "(-)" : "(+)";
String unitStr = "";
switch (weightUnit) {
case BLDBodyFatDataUtil.WeightUnit.JIN:
unitStr = "斤";
break;
case BLDBodyFatDataUtil.WeightUnit.KG:
unitStr = "Kg";
break;
case BLDBodyFatDataUtil.WeightUnit.LB:
unitStr = "lb";
break;
case BLDBodyFatDataUtil.WeightUnit.ST:
unitStr = "ST:LB( 由于 st 与 lb 是标准整数换算,1st=14lb,故重量数据部分还是 lb 的重量)";
break;
}
unitStr += "(" + weightUnit + ")";
mlogList.add(0, "体重数据类型:" + status + " 符号:" + symbol + symbolStr
+ " 体重:" + weight + " 单位:" + unitStr + " 小数点位: " + decimals);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onTempData(int symhol, int temp) {
mlogList.add(0, "温度 符号:" + symhol + " 温度: " + temp + " (精度(precision) 0.1℃)");
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onStatus(int status) {

switch (status) {
case BLDBodyFatDataUtil.WEIGHT_TESTING:
mlogList.add(0, "测量状态:" + status + " 测量实时体重");
break;
case BLDBodyFatDataUtil.WEIGHT_RESULT:
mlogList.add(0, "测量状态:" + status + " 稳定体重");
break;
case BLDBodyFatDataUtil.IMPEDANCE_TESTING:
mlogList.add(0, "测量状态:" + status + " 阻抗测量中");
break;
case BLDBodyFatDataUtil.IMPEDANCE_SUCCESS:
case BLDBodyFatDataUtil.IMPEDANCE_SUCCESS_DATA:
mlogList.add(0, "测量状态:" + status + " 阻抗测量成功");
break;
case BLDBodyFatDataUtil.IMPEDANCE_FAIL:
mlogList.add(0, "测量状态:" + status + " 阻抗测量失败");
break;

case BLDBodyFatDataUtil.TEST_FINISH:
mlogList.add(0, "测量状态:" + status + " 测量完成");
break;
case BLDBodyFatDataUtil.REQUESR_USER_INFO:
mlogList.add(0, "测量状态:" + status + " 请求用户信息");
break;
case BLDBodyFatDataUtil.TEMPERATURE:
mlogList.add(0, "测量状态:" + status + " 测量温度");
break;
case BLDBodyFatDataUtil.REQUEST_CURRENT_UNIT:
mlogList.add(0, "测量状态:" + status + " 请求单位单位");
mMHandler.sendEmptyMessage(SETUNIT);
break;
case BLDBodyFatDataUtil.ERROR_CODE:
mlogList.add(0, "测量状态:" + status + " 错误");

break;
default:
mlogList.add(0, "测量状态:" + status);

}
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onAdc(int adc, int algorithmic) {
mlogList.add(0, "阻抗:" + adc);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onBodyFat(int bf, int vfg, int muscleMassKg, int bmv, int Bmr, int age, int bfStandard, int vfgStandard, int muscleMassStandard, int bmvStandard) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("体脂: ");
stringBuffer.append(bf);
stringBuffer.append(" 精度(precision) 0.1%,范围(scope) 5.0~75.0%");
stringBuffer.append(" 标准:");
stringBuffer.append(bfStandard);
stringBuffer.append("\n内脏脂肪等级: ");
stringBuffer.append(vfg);
stringBuffer.append(" 精度(precision) 0.5,范围(scope) 1.0~59.0");
stringBuffer.append(" 标准:");
stringBuffer.append(vfgStandard);
stringBuffer.append("\n肌肉量: ");
stringBuffer.append(muscleMassKg);
stringBuffer.append(" 精度(precision) 0.1kg");
stringBuffer.append(" 标准:");
stringBuffer.append(muscleMassStandard);
stringBuffer.append("\n基础代谢量: ");
stringBuffer.append(bmv);
stringBuffer.append(" 精度(precision) 1kcal");
stringBuffer.append(" 标准:");
stringBuffer.append(bmvStandard);
stringBuffer.append("\n体水分率: ");
stringBuffer.append(Bmr);
stringBuffer.append(" 精度(precision) 0.1%");
stringBuffer.append("\n体内年龄: ");
stringBuffer.append(age);
stringBuffer.append(" 范围(scope) 18-90");

mlogList.add(0, stringBuffer.toString());
mMHandler.sendEmptyMessage(ToRefreUi);
}


@Override
public void onError(int code) {
mlogList.add(0, "错误码:" + code);
mMHandler.sendEmptyMessage(ToRefreUi);
}


@Override
public void onVersion(String version) {
mlogList.add(0, "版本号:" + version);
mMHandler.sendEmptyMessage(ToRefreUi);

}

@Override
public void onSupportUnit(List<SupportUnitBean> list) {
String listStr = "";
for (SupportUnitBean supportUnitBean : list) {
listStr = supportUnitBean.toString();
}
mlogList.add(0, "支持的单位列表:" + listStr);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onMcuBatteryStatus(int status, int battery) {
mlogList.add(0, "电量状态" + status + " 电量:" + battery);
mMHandler.sendEmptyMessage(ToRefreUi);
}


/**
* @param status {@link#Bod}
*/
@Override
public void setUnitCallback(int status) {
if (status == BLDBodyFatDataUtil.UnitResult.SUCCESS) {
mlogList.add(0, "下发单位回调" + status + " 成功");
} else if (status == BLDBodyFatDataUtil.UnitResult.FAIL) {
mlogList.add(0, "下发单位回调" + status + " 失败");
} else {
mlogList.add(0, "下发单位回调" + status + " 不支持");
}
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void requestUserData(int status) {
if (status == BLDBodyFatDataUtil.REQUEST_SEND_USER) {
mlogList.add(0, "下发用户信息 " + status + " \n" + selectUser.toString());
bodyFatBleUtilsData.sendData(BLDBodyFatDataUtil.getInstance().setUserInfo(selectUser));
} else if (status == BLDBodyFatDataUtil.REQUEST_SEND_USER_RECEIVE_SUCESS) {
mlogList.add(0, "下发用户信息成功 " + status);
} else {
mlogList.add(0, "下发用户信息失败 " + status);
}
mMHandler.sendEmptyMessage(ToRefreUi);
}


@Override
public void onClick(View v) {
int id = v.getId();


}

private final int ToRefreUi = 300;
private final int GETLIST = 301;
private final int SETUNIT = 302;


private class MHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case ToRefreUi:
if (listAdapter != null) {
listAdapter.notifyDataSetChanged();
}
break;
case GETLIST:
if (bodyFatBleUtilsData != null)
bodyFatBleUtilsData.sendData(BLDBodyFatDataUtil.getInstance().getUnitSupportUnit());
break;

case SETUNIT:
if (bodyFatBleUtilsData != null)
bodyFatBleUtilsData.sendData(BLDBodyFatDataUtil.getInstance().setWeightUnit(weighunit));
break;
}
}
}


}

+ 3
- 2
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BabyBodyFatCmdActivity.java 查看文件

@@ -24,12 +24,13 @@ import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleDensityUtil;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.babyBodyFat.BabyBodyFatBleConfig;

+ 4
- 3
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BabyCmdActivity.java 查看文件

@@ -23,22 +23,23 @@ import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleDensityUtil;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.babyscale.BabyBleConfig;
import cn.net.aicare.modulelibrary.module.babyscale.BabyDeviceData;



/**
* xing<br>
* 2019/4/25<br>
* 婴儿秤
* 显示数据
*/
public class BabyCmdActivity extends BleBaseActivity implements OnCallbackDis, OnBleVersionListener
, OnMcuParameterListener, OnBleCompanyListener, View.OnClickListener,

+ 86
- 17
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BleCmdActivity.java 查看文件

@@ -29,18 +29,18 @@ import com.pingwang.bluetoothlib.listener.OnBleParameterListener;
import com.pingwang.bluetoothlib.listener.OnBleRssiListener;
import com.pingwang.bluetoothlib.listener.OnBleSettingListener;
import com.pingwang.bluetoothlib.listener.OnBleVersionListener;
import com.pingwang.bluetoothlib.listener.OnCallbackDis;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleDataUtils;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

@@ -50,13 +50,14 @@ import androidx.annotation.Nullable;
* 2019/4/25<br>
* 基础指令信息数据显示
*/
public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, OnBleDeviceDataListener, OnBleVersionListener, OnMcuParameterListener, OnBleErrListener, OnBleInfoListener, OnBleParameterListener, OnBleCompanyListener, OnBleSettingListener, OnBleHandshakeListener, View.OnClickListener, OnBleOtherDataListener, OnBleRssiListener {
public class BleCmdActivity extends BleBaseActivity implements OnCallbackBle, OnBleDeviceDataListener, OnBleVersionListener, OnMcuParameterListener, OnBleErrListener, OnBleInfoListener,
OnBleParameterListener, OnBleCompanyListener, OnBleSettingListener, OnBleHandshakeListener, View.OnClickListener, OnBleOtherDataListener, OnBleRssiListener {

private static String TAG = BleCmdActivity.class.getName();
private final int REFRESH_DATA = 3;
private List<String> mList;
private ArrayAdapter listAdapter;
private EditText etName, etMacType, etCid, etVid, etPid, etBroadcastTime, etMcuType, etSleepTime;
private EditText etName, etMacType, etCid, etVid, etPid, etBroadcastTime, etMcuType, etSleepTime, et_set_device;
private Context mContext;
private String mAddress;
private BleSendCmdUtil mBleSendCmdUtil;
@@ -122,6 +123,10 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
findViewById(R.id.btnSleepTimeRead).setOnClickListener(this);
findViewById(R.id.btn_start_ble).setOnClickListener(this);
findViewById(R.id.btnNameRssi).setOnClickListener(this);
findViewById(R.id.btn_set_device).setOnClickListener(this);
findViewById(R.id.btn_get_device).setOnClickListener(this);
findViewById(R.id.btnDis).setOnClickListener(this);
findViewById(R.id.btnConnect).setOnClickListener(this);
etName = findViewById(R.id.etName);
etMacType = findViewById(R.id.etMacType);
etCid = findViewById(R.id.etCid);
@@ -130,12 +135,25 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
etBroadcastTime = findViewById(R.id.etBroadcastTime);
etMcuType = findViewById(R.id.etMcuType);
etSleepTime = findViewById(R.id.etSleepTime);
et_set_device = findViewById(R.id.et_set_device);
}

@Override
public void onClick(View v) {
SendBleBean sendBleBean;
switch (v.getId()) {
case R.id.btnDis:
if (mBleDevice!=null){
mBleDevice.disconnect();
}
mList.add(TimeUtils.getTime() + "断开连接");
mHandler.sendEmptyMessage(REFRESH_DATA);
break;
case R.id.btnConnect:
mBluetoothService.connectDevice(mAddress);
mList.add(TimeUtils.getTime() + "连接设备");
mHandler.sendEmptyMessage(REFRESH_DATA);
break;
case R.id.btnClear:
if (mList != null)
mList.clear();
@@ -153,11 +171,17 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
}
break;
case R.id.btnVersion:
// sendBleBean = new SendBleBean();
// sendBleBean.setHex(mBleSendCmdUtil.getBleVersion());
// sendData(sendBleBean);

if (mBleDevice != null) {
String version = mBleDevice.getVersion();
if (TextUtils.isEmpty(version)) {
sendBleBean = new SendBleBean();
sendBleBean.setHex(mBleSendCmdUtil.getBleVersion());
sendData(sendBleBean);
mList.add(TimeUtils.getTime() + "正在获取版本号.");
mHandler.sendEmptyMessage(REFRESH_DATA);
return;
}
mList.add(TimeUtils.getTime() + "版本号:" + version);
mHandler.sendEmptyMessage(REFRESH_DATA);
}
@@ -301,8 +325,29 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
mBleDevice.readRssi();
}
break;


case R.id.btn_set_device:
// 设置设备信息
String setDevice = et_set_device.getText().toString();
setDevice = setDevice.replace(" ", "");
setDevice = setDevice.replace(",", "");
if (TextUtils.isEmpty(setDevice)) {
return;
}
byte[] data = BleStrUtils.stringToByte(setDevice);
sendBleBean = new SendBleBean();
sendBleBean.setHex(mBleSendCmdUtil.setDeviceInfo(data));
sendData(sendBleBean);
mList.add(TimeUtils.getTime() + "设置设备信息:" + BleStrUtils.byte2HexStr(data));
mHandler.sendEmptyMessage(REFRESH_DATA);
break;
case R.id.btn_get_device:
// 获取设备信息
sendBleBean = new SendBleBean();
sendBleBean.setHex(mBleSendCmdUtil.getDeviceInfo());
sendData(sendBleBean);
mList.add(TimeUtils.getTime() + "读取设备信息");
mHandler.sendEmptyMessage(REFRESH_DATA);
break;
}
}

@@ -321,10 +366,16 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
mList.add(TimeUtils.getTime() + "服务与界面建立连接成功");
mHandler.sendEmptyMessage(REFRESH_DATA);
CallbackDisIm.getInstance().addListListener(this);
mBluetoothService.setOnCallback(this);
mBluetoothService.deviceConnectListener(mAddress, true);
connectSuccess();
}

private void connectSuccess() {
if (mBluetoothService != null) {
mBleDevice = mBluetoothService.getBleDevice(mAddress);
if (mBleDevice == null) {
finish();
BleLog.i(TAG, "mBleDevice==null");
return;
}
@@ -339,6 +390,7 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
mBleDevice.setOnBleHandshakeListener(this);
mBleDevice.setOnBleOtherDataListener(this);
mBleDevice.setOnBleRssiListener(this);

}
}

@@ -383,7 +435,7 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
BleLog.i(TAG, "连接断开");
if (mAddress.equals(mac)) {
Toast.makeText(mContext, "连接断开:" + code, Toast.LENGTH_SHORT).show();
finish();
mBleDevice=null;
}
}

@@ -391,7 +443,7 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
public void onServicesDiscovered(@NonNull String mac) {
//TODO 连接成功(获取服务成功)
BleLog.i(TAG, "连接成功(获取服务成功)");
connectSuccess();
}


@@ -420,7 +472,24 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On

@Override
public void onNotifyDataA6(byte[] hex) {

if (hex != null && hex.length > 0) {
switch (hex[0]) {
case CmdConfig.SET_DEVICE_INFO: {
// 设置设备信息
mList.add(TimeUtils.getTime() + "设置设备信息:结果:" + hex[1]);
mHandler.sendEmptyMessage(REFRESH_DATA);
}
break;
case CmdConfig.GET_DEVICE_INFO: {
// 读取设备信息
byte[] data = new byte[hex.length - 1];
System.arraycopy(hex, 1, data, 0, data.length);
mList.add(TimeUtils.getTime() + "读取设备信息:结果:" + BleStrUtils.byte2HexStr(data));
mHandler.sendEmptyMessage(REFRESH_DATA);
}
break;
}
}
}

@Override
@@ -432,9 +501,9 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
if (hex != null)
data = BleStrUtils.byte2HexStr(hex);
if (type == 100) {
mList.add(TimeUtils.getTime() + "send->" + data);
mList.add(TimeUtils.getTime() + "cid=" + type + "\nsend->" + data);
} else {
mList.add(TimeUtils.getTime() + "notify->" + data);
mList.add(TimeUtils.getTime() + "cid=" + type + "\nnotify->" + data);
}
mHandler.sendEmptyMessage(REFRESH_DATA);
}
@@ -494,7 +563,7 @@ public class BleCmdActivity extends BleBaseActivity implements OnCallbackDis, On
}

@Override
public void OnSettingReturn(byte cmdType, byte cmdData) {
public void OnSettingReturn(int cmdType, int cmdData) {
if (CmdConfig.SET_TO_SLEEP == cmdType && cmdData == CmdConfig.SETTING_SUCCESS) {
//进入睡眠
}

+ 1
- 2
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BloodGlucoseActivity.java 查看文件

@@ -15,12 +15,11 @@ import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.BloodGlucose.BloodGlucoseBleDeviceData;
import cn.net.aicare.modulelibrary.module.BloodGlucose.BloodGlucoseUtil;

public class BloodGlucoseActivity extends BleBaseActivity implements OnCallbackBle ,BloodGlucoseBleDeviceData.BloodGlucoseCallback{
public class BloodGlucoseActivity extends aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity implements OnCallbackBle ,BloodGlucoseBleDeviceData.BloodGlucoseCallback{

private Button support_unit, quest_status,showdata;
private RadioButton mmol, mg;

+ 4
- 3
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BloodOxygenActivity.java 查看文件

@@ -8,17 +8,18 @@ import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;

import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatSeekBar;
import cn.net.aicare.modulelibrary.module.BloodOxygen.BleBloodOxygenBleConfig;
import cn.net.aicare.modulelibrary.module.BloodOxygen.BleBloodOxygenDeviceData;


+ 6
- 10
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BloodSugar4GActivity.java 查看文件

@@ -10,6 +10,11 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -23,10 +28,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

/**
* 4G血糖仪
*/
@@ -103,15 +104,10 @@ public class BloodSugar4GActivity extends AppCompatActivity implements View.OnCl

}
});

}

public void login() throws Throwable {
//以下登录信息为服务器key和用户账号密码,仅供测试使用上线使用会导致只有一个用户可用
String key = "inet_elink";//key
String username = "dhls@qq.com";//用户账号
String password = "dc483e80a7a0bd9ef71d8cf973673924";//用户密码
String mUrl = url + "/api/user/login?key=" + key + "&username=" + username + "&password=" + password;
String mUrl=url + "/api/user/login?key=inet_elink&username=dhls@qq.com&password=dc483e80a7a0bd9ef71d8cf973673924";
URL uri = new URL(mUrl);
HttpURLConnection httpURLConnection = (HttpURLConnection) uri.openConnection();
// Post请求必须设置允许输出

+ 2
- 2
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BroadcastBloodOxygenActivity.java 查看文件

@@ -17,13 +17,13 @@ import com.pingwang.bluetoothlib.listener.OnCallbackDis;
import com.pingwang.bluetoothlib.listener.OnScanFilterListener;
import com.pingwang.bluetoothlib.utils.BleDensityUtil;
import com.pingwang.bluetoothlib.utils.BleLog;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.BloodOxygen.BroadcastBloodOxygenBleConfig;
import cn.net.aicare.modulelibrary.module.BloodOxygen.BroadcastBloodOxygenDeviceData;

+ 3
- 3
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/BroadcastScaleActivity.java 查看文件

@@ -21,13 +21,13 @@ import com.pingwang.bluetoothlib.listener.OnScanFilterListener;
import com.pingwang.bluetoothlib.utils.BleDensityUtil;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.BroadcastScale.BroadcastScaleBleConfig;
import cn.net.aicare.modulelibrary.module.BroadcastScale.BroadcastScaleDeviceData;
@@ -250,7 +250,7 @@ public class BroadcastScaleActivity extends BleBaseActivity implements OnCallbac
return;
}
mOldData=data;
mList.add(TimeUtils.getTime() + "数据ID" + type+" ,||解密数据:"+data+" ,||原始数据:"+ BleStrUtils.byte2HexStr(dataOriginal));
mList.add(TimeUtils.getTime() + "数据ID" + type+" ,||解密数据:"+data+" ,||原始数据:"+BleStrUtils.byte2HexStr(dataOriginal));
mHandler.sendEmptyMessage(REFRESH_DATA);
}


+ 5
- 4
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ClearShakeHandsActivity.java 查看文件

@@ -10,6 +10,9 @@ import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.device.BleSendCmdUtil;
import com.pingwang.bluetoothlib.device.SendBleBean;
@@ -22,14 +25,12 @@ import com.pingwang.bluetoothlib.listener.OnCallbackDis;
import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.sphygmomanometer.SphyBleConfig;



+ 6
- 6
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ConnectBleTestActivity.java 查看文件

@@ -16,22 +16,22 @@ import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.listener.CallbackDisIm;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.server.ELinkBleServer;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.LoadingIosDialogFragment;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.LoadingIosDialogFragment;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;


/**
* xing<br>

+ 6
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/EightBodyfatActivity.java 查看文件

@@ -10,11 +10,13 @@ import android.widget.RadioButton;
import com.pingwang.bluetoothlib.bean.SupportUnitBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.EightBodyFatAlgorithms;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.EightBodyFatBean;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.EightBodyfatscale.EightBodyFatBleDeviceData;
import cn.net.aicare.modulelibrary.module.EightBodyfatscale.EightBodyFatUtil;
@@ -72,7 +74,6 @@ public class EightBodyfatActivity extends BleBaseActivity implements View.OnClic
}
});
stlb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
@@ -147,12 +148,12 @@ public class EightBodyfatActivity extends BleBaseActivity implements View.OnClic
@Override
public void onState(int type, int typeState, int result) {
switch (type) {
// case EightBodyFatUtil.WEIGHING:
// case EightBodyfatUtil.WEIGHING:
// switch (typeState) {
// case EightBodyFatUtil.WEIGHT_REAL_TIME_WEIGH:
// case EightBodyfatUtil.WEIGHT_REAL_TIME_WEIGH:
// loglist.add(0, "实时体重");
// break;
// case EightBodyFatUtil.WEIGHT_STABILIZATION_WEIGHT:
// case EightBodyfatUtil.WEIGHT_STABILIZATION_WEIGHT:
// loglist.add(0, "稳定体重");
// }
// break;

+ 8
- 6
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/HeightCmdActivity.java 查看文件

@@ -11,6 +11,9 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.device.BleSendCmdUtil;
import com.pingwang.bluetoothlib.device.SendBleBean;
@@ -23,24 +26,23 @@ import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleDensityUtil;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.height.HeightDeviceData;



/**
* xing<br>
* 2019/4/25<br>
* 身高仪
*y身高仪
*/
public class HeightCmdActivity extends BleBaseActivity implements OnCallbackDis,
HeightDeviceData.onNotifyData, OnBleVersionListener, OnMcuParameterListener, OnBleCompanyListener, View.OnClickListener {
HeightDeviceData.onNotifyData, OnBleVersionListener , OnMcuParameterListener, OnBleCompanyListener, View.OnClickListener {

private static String TAG = HeightCmdActivity.class.getName();
private final int REFRESH_DATA = 3;

+ 5
- 4
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/HeightWeightScaleActivity.java 查看文件

@@ -8,23 +8,24 @@ import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.bean.SupportUnitBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.HeightWeightScale.HeightBodyFatBleData;
import cn.net.aicare.modulelibrary.module.HeightWeightScale.HeightBodyFatBleUntils;

/**
* 身高体
* 身高体
*/
public class HeightWeightScaleActivity extends BleBaseActivity implements OnCallbackBle, HeightBodyFatBleData.OnHeightBodyFatDataCallback, View.OnClickListener {
private String mAddress = "";

+ 63
- 7
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/MainActivity.java 查看文件

@@ -5,7 +5,9 @@ import android.os.Message;
import android.view.View;
import android.widget.TextView;

import com.pingwang.bluetoothlib.AILinkBleManager;
import com.pingwang.bluetoothlib.AILinkSDK;
import com.pingwang.bluetoothlib.config.BleConfig;
import com.pingwang.bluetoothlib.utils.BleLog;

import java.util.ArrayList;
@@ -16,6 +18,7 @@ import aicare.net.cn.sdk.ailinksdkdemoandroid.config.AppConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.find.FindDeviceNewActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.broadcast_height.BroadcastHeightActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.broadcast_nutrition.BroadNutritionActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.SP;


@@ -88,7 +91,7 @@ public class MainActivity extends BleAppBaseActivity {
mList.add(findViewById(R.id.btn_baby));
mList.add(findViewById(R.id.btn_height));
mList.add(findViewById(R.id.btn_ble));
mList.add(findViewById(R.id.btn_lock));
// mList.add(findViewById(R.id.btn_lock));
mList.add(findViewById(R.id.btn_ble_test));
mList.add(findViewById(R.id.btnConnectTest));
mList.add(findViewById(R.id.btn_ad_weight));
@@ -118,6 +121,9 @@ public class MainActivity extends BleAppBaseActivity {
mList.add(findViewById(R.id.btn_food_temp));
mList.add(findViewById(R.id.btn_temp_humidity));
mList.add(findViewById(R.id.btn_share_condom));
mList.add(findViewById(R.id.btn_rope_skip));
mList.add(findViewById(R.id.btn_broadcast_nutrition));
mList.add(findViewById(R.id.btn_ble_nutrition));
for (View view : mList) {
view.setOnClickListener(listener);
}
@@ -131,12 +137,40 @@ public class MainActivity extends BleAppBaseActivity {
}
}

// AILinkBleManager.getInstance().init(mContext, new AILinkBleManager.onInitListener() {
// @Override
// public void onInitSuccess() {
// L.i("初始化成功");
// AILinkBleManager.getInstance().startScan(1000);
// AILinkBleManager.getInstance().setOnCallbackBle(new OnCallbackBle() {
// @Override
// public void onScanning(BleValueBean data) {
// L.i("当前搜索到的设备:"+data.getName()+" mac="+data.getMac());
// AILinkBleManager.getInstance().stopScan();
// AILinkBleManager.getInstance().connectDevice(data);
// }
//
// @Override
// public void onServicesDiscovered(String mac) {
// L.i("连接成功:"+mac);
// }
// });
//
// }
//
// @Override
// public void onInitFailure() {
// L.i("初始化失败");
// }
// });

}

@Override
protected void initData() {
initPermissions();


}

@Override
@@ -144,7 +178,18 @@ public class MainActivity extends BleAppBaseActivity {
BleLog.init("", "", BuildConfig.DEBUG);
String version = getString(R.string.version) + ":" + BuildConfig.VERSION_NAME;
((TextView) findViewById(R.id.tv_app_version)).setText(version);
AILinkSDK.getInstance().init(getApplication());//sdk
AILinkSDK.getInstance().init(getApplication(), new AILinkBleManager.onInitListener() {
@Override
public void onInitSuccess() {

}

@Override
public void onInitFailure() {

}
});//sdk
BleConfig.addVendorID(0xac05);
SP.init(this);
}

@@ -159,7 +204,7 @@ public class MainActivity extends BleAppBaseActivity {
switch (v.getId()) {

case R.id.btn_clear_shake_hands:
type= BleDeviceConfig.CLEAR_SHAKE_HANDS;
type=BleDeviceConfig.CLEAR_SHAKE_HANDS;
break;

case R.id.btn_sphy:
@@ -256,7 +301,7 @@ public class MainActivity extends BleAppBaseActivity {
type = BleDeviceConfig.SHARE_SOCKET;
break;
case R.id.btn_share_condom:
// 共享套套机
// 共享插座
type = BleDeviceConfig.SHARE_CONDOM;
break;
case R.id.btn_find:
@@ -286,16 +331,27 @@ public class MainActivity extends BleAppBaseActivity {
case R.id.btn_temp_humidity:
type= BleDeviceConfig.TEMP_Humidity;
break;

case R.id.btn_rope_skip:
type=BleDeviceConfig.ROPE_SKIPPING;
break;
case R.id.btn_broadcast_nutrition:
// 广播营养秤
Intent broadcastNutritionIntent = new Intent(MainActivity.this, BroadNutritionActivity.class);
startActivity(broadcastNutritionIntent);
return;
case R.id.btn_ble_nutrition:
// 蓝牙营养秤
type = BleDeviceConfig.BLE_NUTRITION_SCALE;
break;
}
startActivity(type);
}
}


private void startActivity(int tyep) {
private void startActivity(int type) {
Intent intent = new Intent(this, ShowBleActivity.class);
intent.putExtra("type", tyep);
intent.putExtra("type", type);
startActivity(intent);
}


+ 226
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/RopeSkippingActivity.java 查看文件

@@ -0,0 +1,226 @@
package aicare.net.cn.sdk.ailinksdkdemoandroid;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.google.gson.Gson;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.RopeSkipping.OnRopeSkipCallBack;
import cn.net.aicare.modulelibrary.module.RopeSkipping.RopeSkipRecord;
import cn.net.aicare.modulelibrary.module.RopeSkipping.RopeSkippingBleData;

public class RopeSkippingActivity extends BleBaseActivity implements View.OnClickListener, OnCallbackBle, OnRopeSkipCallBack {


private List<String> logList;
private ArrayAdapter mArrayAdapter;
private ListView listviw;


private String mAddress;

@Override
public void onServiceSuccess() {
mBluetoothService.setOnCallback(this);
logList.add("绑定服务成功");
if (mBluetoothService != null) {
mBluetoothService.setOnCallback(this);
BleDevice bleDevice = mBluetoothService.getBleDevice(mAddress);
if (bleDevice != null) {
RopeSkippingBleData.init(bleDevice);
RopeSkippingBleData.getInstance().setOnRopeSkipCallBack(this);

}
}

}

@Override
public void onServiceErr() {
if (mArrayAdapter != null && logList != null) {
logList.add("绑定服务失败");
mArrayAdapter.notifyDataSetChanged();
}
}

@Override
public void unbindServices() {
if (mArrayAdapter != null && logList != null) {
logList.add("解除绑定服务");
mArrayAdapter.notifyDataSetChanged();
}

}


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAddress = getIntent().getStringExtra("mac");
setContentView(R.layout.activity_rope_skipping);
listviw = findViewById(R.id.listview);

findViewById(R.id.btn_syn_time).setOnClickListener(this);
findViewById(R.id.btn_free_jump).setOnClickListener(this);
findViewById(R.id.btn_time_jump).setOnClickListener(this);
findViewById(R.id.btn_num_jump).setOnClickListener(this);
findViewById(R.id.btn_stop_free_jump).setOnClickListener(this);
findViewById(R.id.btn_stop_time_jump).setOnClickListener(this);
findViewById(R.id.btn_stop_num_jump).setOnClickListener(this);

findViewById(R.id.btn_get_history).setOnClickListener(this);
findViewById(R.id.btn_clear_log).setOnClickListener(this);
findViewById(R.id.btn_default_timer).setOnClickListener(this);
findViewById(R.id.btn_default_num).setOnClickListener(this);
findViewById(R.id.btn_bind).setOnClickListener(this);


logList = new ArrayList<>();
mArrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, logList);
listviw.setAdapter(mArrayAdapter);
}

@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_syn_time) {
logList.add("同步时间搓");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().synTime(System.currentTimeMillis());
}
mArrayAdapter.notifyDataSetChanged();

} else if (v.getId() == R.id.btn_free_jump) {
logList.add("启动自由跳绳");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().startOrStopMode(1, 1);
}
mArrayAdapter.notifyDataSetChanged();
} else if (v.getId() == R.id.btn_time_jump) {
logList.add("启动倒计时跳绳");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().startOrStopMode(2, 1);
}
mArrayAdapter.notifyDataSetChanged();

} else if (v.getId() == R.id.btn_num_jump) {
logList.add("启动倒计数跳绳绳");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().startOrStopMode(3, 1);
}
mArrayAdapter.notifyDataSetChanged();
} else if (v.getId() == R.id.btn_clear_log) {
logList.clear();
mArrayAdapter.notifyDataSetChanged();
} else if (v.getId() == R.id.btn_stop_free_jump) {
logList.add("结束自由跳绳");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().startOrStopMode(1, 0);
}
mArrayAdapter.notifyDataSetChanged();
} else if (v.getId() == R.id.btn_stop_time_jump) {
logList.add("结束倒计时跳绳");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().startOrStopMode(2, 0);
}
mArrayAdapter.notifyDataSetChanged();

} else if (v.getId() == R.id.btn_stop_num_jump) {
logList.add("结束倒计数跳绳绳");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().startOrStopMode(3, 0);
}
mArrayAdapter.notifyDataSetChanged();
} else if (v.getId() == R.id.btn_default_num) {
logList.add("默认倒计数100");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().setCountDownNum(50);
}
mArrayAdapter.notifyDataSetChanged();
} else if (v.getId() == R.id.btn_default_timer) {
logList.add("默认倒计时60");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().setTimerNum(120);
}
mArrayAdapter.notifyDataSetChanged();
} else if (v.getId() == R.id.btn_get_history) {
logList.add("获取离线记录");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().offlineHistory(1);
}
mArrayAdapter.notifyDataSetChanged();

} else if (v.getId() == R.id.btn_bind) {
logList.add("请按确认按钮");
if (RopeSkippingBleData.getInstance() != null) {
RopeSkippingBleData.getInstance().questBind();
}
mArrayAdapter.notifyDataSetChanged();
}
}


@Override
public void onFinish(RopeSkipRecord ropeSkipBean) {
logList.add("跳绳结束");
logList.add(ropeSkipBean.toString() + " \n绊绳=" + new Gson().toJson(ropeSkipBean.getStopDetail()));
mArrayAdapter.notifyDataSetChanged();
}

@Override
public void onBattery(int battery) {

}

@Override
public void onCurrentData(int status, int mode, int defaultValue, int currentJumpNum, int currentJumpTime, int batter) {
logList.add("实时数据 \n" + "状态: " + status + " ( 0:准备 1:进行中 2:完成) \n" + "模式: "
+ mode + " (1:自由 2:倒计时 3:倒计数) \n"
+ "默认值: " + defaultValue + " 电量 " + batter + "\n 当前个数: " + currentJumpNum + " 时间 " + currentJumpTime);
mArrayAdapter.notifyDataSetChanged();
}

@Override
public void onResultTimerAndCountDownNum(int mode, int timer) {
if (mode == 2) {
logList.add("设置默认时间:" + timer);
} else if (mode == 3) {
logList.add("设置默认个数:" + timer);

}
mArrayAdapter.notifyDataSetChanged();
}

@Override
public void onResultStatus(int mode, int result) {
logList.add("模式: " + mode + " (1:自由 2:倒计时 3:倒计数)" + "结果: " + result + "0:成功 1:失败 2:不支持");
mArrayAdapter.notifyDataSetChanged();


}

@Override
public void onBindResult(int result) {
logList.add("确认绑定结果: " + result + " 0 : 成功 1 :失败 2 不支持");
mArrayAdapter.notifyDataSetChanged();
}

@Override
public void onFinishOffHistory(List<RopeSkipRecord> list) {
if (list==null){
logList.add("没有离线记录");
}else {
logList.add("离线记录:");
logList.add(new Gson().toJson(list));
mArrayAdapter.notifyDataSetChanged();
}
}
}

+ 18
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ShowBleActivity.java 查看文件

@@ -40,9 +40,12 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;

import aicare.net.cn.sdk.ailinksdkdemoandroid.config.AppConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.LoadingIosDialogFragment;
import aicare.net.cn.sdk.ailinksdkdemoandroid.find.FindDeviceNewActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.ble_nutrition.BleNutritionActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.blood_glucose.BloodGlucoseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.coffee_scale.CoffeeScaleActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.food_temp.FoodTempActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.share_charger.ShareChargerActivity;
@@ -52,6 +55,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import cn.net.aicare.modulelibrary.module.RopeSkipping.RopeSkippingBleData;
import cn.net.aicare.modulelibrary.module.scooter.SkateboardBleConfig;


@@ -212,6 +216,11 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle,
} else if (mCid == 0) {
//CID=0不需要握手
BleConfig.setHandshakeStatus(mac, false);
} else if (mCid == BleDeviceConfig.ROPE_SKIPPING) {
//要加密要握手。别人家的东西
if (mVid == 0x0027 && mPid == 0x0001) {
BleConfig.setHandshakeStatus(RopeSkippingBleData.LongXiang, mac, true);
}
}
if (mBluetoothService != null) {
mBluetoothService.stopScan();
@@ -327,6 +336,7 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle,
bleDevice.setA7Encryption(false);
mNoEncryptionMac = "";


}
dismissLoading();
Intent intent = new Intent();
@@ -410,6 +420,13 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle,
case BleDeviceConfig.TEMP_Humidity:
intent.setClass(ShowBleActivity.this, TempHumidityActivity.class);
break;
case BleDeviceConfig.ROPE_SKIPPING:
intent.setClass(ShowBleActivity.this, RopeSkippingActivity.class);
break;
case BleDeviceConfig.BLE_NUTRITION_SCALE:
// 蓝牙营养秤
intent.setClass(ShowBleActivity.this, BleNutritionActivity.class);
break;
// case BleDeviceConfig.BLD_WEIGHT:
// intent.setClass(ShowBleActivity.this, BLDWeightScaleBle.class);
// break;
@@ -425,7 +442,7 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle,
case -4:
intent.setClass(ShowBleActivity.this, TransmissionActivity.class);
break;
case 65536:
case BleDeviceConfig.CLEAR_SHAKE_HANDS:
//验证不握手不加密的界面
intent.setClass(ShowBleActivity.this, ClearShakeHandsActivity.class);
break;

+ 12
- 17
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/SkateboardDataActivity.java 查看文件

@@ -14,15 +14,6 @@ import com.pingwang.bluetoothlib.config.BleConfig;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnBleHandshakeListener;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.realsil.sdk.core.RtkConfigure;
import com.realsil.sdk.core.RtkCore;
import com.realsil.sdk.core.logger.ZLogger;
import com.realsil.sdk.dfu.DfuConstants;
import com.realsil.sdk.dfu.RtkDfu;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleAppBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.DialogStringImageAdapter;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.ShowListDialogFragment;
@@ -30,6 +21,10 @@ import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.FileUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.L;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.MyBleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import cn.net.aicare.modulelibrary.module.scooter.BleWeatherBean;
import cn.net.aicare.modulelibrary.module.scooter.SkateboardBleConfig;
@@ -38,7 +33,7 @@ import cn.net.aicare.modulelibrary.module.scooter.SkateboardDevice;
/**
* xing<br>
* 2020/6/28<br>
* 滑板车
* 滑板车界面
*/
public class SkateboardDataActivity extends BleAppBaseActivity implements OnCallbackBle, View.OnClickListener, SkateboardDevice.onNotifyData,
RtkOtaManager.OnRtkOtaInfoListener, ShowListDialogFragment.onDialogListener, OnBleHandshakeListener {
@@ -218,7 +213,7 @@ public class SkateboardDataActivity extends BleAppBaseActivity implements OnCall
* rtk升级方式
* 默认静默升级
*/
private int mRtkOtaType = DfuConstants.OTA_MODE_SILENT_FUNCTION;
private int mRtkOtaType = RtkOtaManager.OTA_MODE_SILENT_FUNCTION;
/**
* ota作用域
*/
@@ -830,8 +825,8 @@ public class SkateboardDataActivity extends BleAppBaseActivity implements OnCall
//OTA类型
case R.id.btn_ota_type:
List<DialogStringImageAdapter.DialogStringImageBean> list = new ArrayList<>();
list.add(new DialogStringImageAdapter.DialogStringImageBean("静默升级", DfuConstants.OTA_MODE_SILENT_FUNCTION));
list.add(new DialogStringImageAdapter.DialogStringImageBean("普通升级", DfuConstants.OTA_MODE_NORMAL_FUNCTION));
list.add(new DialogStringImageAdapter.DialogStringImageBean("静默升级", RtkOtaManager.OTA_MODE_SILENT_FUNCTION));
list.add(new DialogStringImageAdapter.DialogStringImageBean("普通升级", RtkOtaManager.OTA_MODE_NORMAL_FUNCTION));
ShowListDialogFragment.newInstance().setTitle("").setCancel("", 0).setCancelBlank(true).setBackground(true).setBottom(false)
.setList(list).setOnDialogListener(new ShowListDialogFragment.onDialogListener() {
@Override
@@ -1026,10 +1021,10 @@ public class SkateboardDataActivity extends BleAppBaseActivity implements OnCall
mListviewData.setAdapter(listAdapter);
FileUtils.init();
mDialogList = new ArrayList<>();
RtkConfigure configure = new RtkConfigure.Builder().debugEnabled(BuildConfig.DEBUG).printLog(true).logTag("OTA").build();
RtkCore.initialize(this, configure);
RtkDfu.initialize(this, BuildConfig.DEBUG);
ZLogger.initialize("AILink", BuildConfig.DEBUG);
// RtkConfigure configure = new RtkConfigure.Builder().debugEnabled(BuildConfig.DEBUG).printLog(true).logTag("OTA").build();
// RtkCore.initialize(this, configure);
// RtkDfu.initialize(this, BuildConfig.DEBUG);
// ZLogger.initialize("AILink", BuildConfig.DEBUG);
}

@Override

+ 5
- 4
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/SmartMaskActivity.java 查看文件

@@ -19,14 +19,15 @@ import com.pingwang.bluetoothlib.listener.OnCallbackDis;
import com.pingwang.bluetoothlib.listener.OnScanFilterListener;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import butterknife.BindView;
import butterknife.ButterKnife;
import cn.net.aicare.modulelibrary.module.SmartMask.SmartMaskBleConfig;
@@ -270,9 +271,9 @@ public class SmartMaskActivity extends BleBaseActivity implements OnCallbackDis,
@Override
public void onSetStatus(int type,int status) {
String data = "";
if (type== SmartMaskBleConfig.GET_TEST_MODE){
if (type==SmartMaskBleConfig.GET_TEST_MODE){
data="进入测试模式:";
}else if (type== SmartMaskBleConfig.GET_POWER){
}else if (type==SmartMaskBleConfig.GET_POWER){
data="关机:";
}
switch (status) {

+ 2
- 2
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/SphyCmdActivity.java 查看文件

@@ -24,12 +24,12 @@ import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleDensityUtil;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.sphygmomanometer.SphyBleConfig;

+ 5
- 4
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TempCmdActivity.java 查看文件

@@ -11,6 +11,9 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.device.BleSendCmdUtil;
import com.pingwang.bluetoothlib.device.SendBleBean;
@@ -23,14 +26,12 @@ import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleDensityUtil;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.thermometer.TempDeviceData;



+ 8
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TempGunCmdActivity.java 查看文件

@@ -12,6 +12,9 @@ import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.device.BleSendCmdUtil;
import com.pingwang.bluetoothlib.device.SendBleBean;
@@ -24,23 +27,23 @@ import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleDensityUtil;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.foreheadgun.TempGunDeviceData;



/**
* xing<br>
* 2019/4/25<br>
* 额温枪
*/
public class TempGunCmdActivity extends BleBaseActivity implements OnCallbackDis, OnBleVersionListener, TempGunDeviceData.onNotifyData , OnBleCompanyListener, OnMcuParameterListener, View.OnClickListener {
public class TempGunCmdActivity extends BleBaseActivity implements OnCallbackDis,
OnBleVersionListener, TempGunDeviceData.onNotifyData , OnBleCompanyListener, OnMcuParameterListener, View.OnClickListener {

private static String TAG = TempGunCmdActivity.class.getName();
private final int REFRESH_DATA = 3;

+ 4
- 3
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TempHumidityActivity.java 查看文件

@@ -9,18 +9,19 @@ import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.TempHumidity.TempHumidityBleUtils;

/**

+ 5
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TestCmdActivity.java 查看文件

@@ -11,6 +11,9 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.config.BleConfig;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.device.SendDataBean;
@@ -19,17 +22,14 @@ import com.pingwang.bluetoothlib.listener.OnBleDeviceDataListener;
import com.pingwang.bluetoothlib.listener.OnCallbackDis;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.UUID;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;


/**
* xing<br>

+ 2
- 2
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ToothBrushWifiBleActivity.java 查看文件

@@ -16,6 +16,8 @@ import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.WifiDialog;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -23,8 +25,6 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.WifiDialog;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.ToothBrush.ToothBrushBleCmd;
import cn.net.aicare.modulelibrary.module.ToothBrush.ToothBrushWiFiBleUtilsData;

+ 8
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TpmsConnectCmdActivity.java 查看文件

@@ -12,6 +12,9 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.device.BleSendCmdUtil;
import com.pingwang.bluetoothlib.device.SendBleBean;
@@ -23,24 +26,24 @@ import com.pingwang.bluetoothlib.listener.OnCallbackDis;
import com.pingwang.bluetoothlib.listener.OnMcuParameterListener;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.tpms.TpmsDeviceData;



/**
* xing<br>
* 2019/9/2<br>
* tpms连接版
*/
public class TpmsConnectCmdActivity extends BleBaseActivity implements OnCallbackDis,
TpmsDeviceData.onNotifyData, TpmsDeviceData.onTpmsSetting, TpmsDeviceData.onTpmsInfo, OnBleVersionListener, OnMcuParameterListener, OnBleCompanyListener, View.OnClickListener {
TpmsDeviceData.onNotifyData, TpmsDeviceData.onTpmsSetting, TpmsDeviceData.onTpmsInfo, OnBleVersionListener,
OnMcuParameterListener, OnBleCompanyListener, View.OnClickListener {

private static String TAG = TpmsConnectCmdActivity.class.getName();
private final int REFRESH_DATA = 3;

+ 16
- 10
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/TransmissionActivity.java 查看文件

@@ -14,13 +14,13 @@ import com.pingwang.bluetoothlib.bean.SupportUnitBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.Transmission.TransmissionDeviceData;

@@ -97,7 +97,7 @@ public class TransmissionActivity extends BleBaseActivity implements View.OnClic
int id = v.getId();
if (id == R.id.send) {
if (!et.getText().toString().isEmpty() && !et_cid.getText().toString().isEmpty()) {
String hex=et.getText().toString().toUpperCase().trim();
String hex = et.getText().toString().toUpperCase().trim();
byte[] hexStr = BleStrUtils.stringToByte(hex);
String cid = et_cid.getText().toString().toUpperCase().trim();
int hexStrCid = Integer.parseInt(cid, 16);
@@ -110,7 +110,7 @@ public class TransmissionActivity extends BleBaseActivity implements View.OnClic
} else if (id == R.id.bt_clear_log) {
mlogList.clear();
mMHandler.sendEmptyMessage(ToRefreUi);
}else if (id==R.id.bt_cid){
} else if (id == R.id.bt_cid) {

if (mTransmissionDeviceData != null) {
mTransmissionDeviceData.getCid();
@@ -123,11 +123,9 @@ public class TransmissionActivity extends BleBaseActivity implements View.OnClic

}



@Override
public void showdata(String data, int type) {
mlogList.add(0, "收 payload数据"+ TimeUtils.getTime()+data);
mlogList.add(0, "收 payload数据" + TimeUtils.getTime() +"cid=" + type + "\n" + data);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@@ -138,19 +136,19 @@ public class TransmissionActivity extends BleBaseActivity implements View.OnClic

@Override
public void onCid(int cid, int vid, int pid) {
mlogList.add(0, "收"+TimeUtils.getTime() + "cid:" + cid + "||vid:" + vid + "||pid:" + pid);
mlogList.add(0, "收" + TimeUtils.getTime() + "cid:" + cid + "||vid:" + vid + "||pid:" + pid);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void otherdata(String data) {
mlogList.add(0, "收 透传数据"+TimeUtils.getTime()+data);
mlogList.add(0, "收 透传数据" + TimeUtils.getTime() + data);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void sendData(String data) {
mlogList.add(0, "发 "+TimeUtils.getTime()+data);
mlogList.add(0, "发 " + TimeUtils.getTime() + data);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@@ -169,4 +167,12 @@ public class TransmissionActivity extends BleBaseActivity implements View.OnClic
}
}
}

@Override
protected void onDestroy() {
super.onDestroy();
if (mBluetoothService!=null) {
mBluetoothService.disconnectAll();
}
}
}

+ 8
- 4
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WeightScaleBleActivity.java 查看文件

@@ -13,21 +13,22 @@ import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioButton;

import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.config.CmdConfig;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.device.SendBleBean;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.AddUserDialog;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.AddUserDialog;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.BodyFatScale.AppHistoryRecordBean;
import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatBleUtilsData;
import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatDataUtil;
@@ -66,6 +67,9 @@ public class WeightScaleBleActivity extends BleBaseActivity implements View.OnCl






}

private void initView(){

+ 119
- 62
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WeightScaleWifiBleActivity.java 查看文件

@@ -22,6 +22,9 @@ import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.WifiDialog;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
@@ -29,9 +32,6 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.WifiDialog;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.BodyFatScale.AppHistoryRecordBean;
import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatBleUtilsData;
@@ -52,28 +52,15 @@ public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.
private MHandler mMHandler;
private EditText mEditText;
private RadioButton kg, jing, stlb, lb;
private byte[] testIp = new byte[]{0x74,
0x65, 0x73, 0x74, 0x2e,
0x61, 0x69, 0x6c, 0x69,
0x6e, 0x6b, 0x2e, 0x72,
0x65, 0x76, 0x69, 0x63,
0x65, 0x2e, 0x61, 0x69,
0x63, 0x61, 0x72, 0x65,
0x2e, 0x6e, 0x65, 0x74,
0x2e, 0x63, 0x6e};

private byte[] productIp = new byte[]{
0x61, 0x69, 0x6c, 0x69, 0x6e, 0x6b, 0x2e,
0x69, 0x6f, 0x74, 0x2e, 0x61, 0x69, 0x63,
0x61, 0x72, 0x65, 0x2e, 0x6e, 0x65, 0x74,
0x2e, 0x63, 0x6e};

private byte[] IpUrl = new byte[]{
0x2f, 0x64, 0x65, 0x76, 0x69,
0x76, 0x63, 0x64, 0x2f, 0x73,
0x65, 0x72, 0x76, 0x64, 0x72,
0x52, 0x65, 0x64, 0x69, 0x72,
0x65, 0x63, 0x74, 0x2f};

private EditText et_ip, et_url, et_port;

private byte[] testIp = new byte[]{0x74, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x72, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x69, 0x63, 0x61, 0x72, 0x65, 0x2e,
0x6e, 0x65, 0x74, 0x2e, 0x63, 0x6e};

private byte[] productIp = new byte[]{0x61, 0x69, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x69, 0x6f, 0x74, 0x2e, 0x61, 0x69, 0x63, 0x61, 0x72, 0x65, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x63, 0x6e};

private byte[] IpUrl = new byte[]{0x2f, 0x64, 0x65, 0x76, 0x69, 0x76, 0x63, 0x64, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x64, 0x72, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x2f};
private boolean isTest = false;

@Override
@@ -91,6 +78,13 @@ public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.
findViewById(R.id.setedmac).setOnClickListener(this);
findViewById(R.id.ota).setOnClickListener(this);
findViewById(R.id.surroundings).setOnClickListener(this);
findViewById(R.id.check_ip).setOnClickListener(this);
findViewById(R.id.check_port).setOnClickListener(this);
findViewById(R.id.check_url).setOnClickListener(this);

et_ip = findViewById(R.id.et_ip);
et_port = findViewById(R.id.et_port);
et_url = findViewById(R.id.et_url);
mEditText = findViewById(R.id.select_wifi_et);
kg = findViewById(R.id.kg);
jing = findViewById(R.id.jin);
@@ -137,6 +131,7 @@ public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.
}
});


}


@@ -504,15 +499,24 @@ public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.

@Override
public void onSetIpStatus(int status) {
// if (status == 0) {
// if (isTest) {
// mList.add(0, "设置环境IP为生产环境成功");
// mList.add(0, "设置环境路径为生产环境");
// } else {
// mList.add(0, "设置环境IP为测试环境成功");
// mList.add(0, "设置环境路径为测试环境");
// }
// setIpUrl(IpUrl);
// } else {
// mList.add(0, "设置环境IP失败");
// }
// listAdapter.notifyDataSetChanged();
if (status == 0) {
if (isTest) {
mList.add(0, "设置环境IP为生产环境成功");
mList.add(0, "设置环境路径为生产环境");
} else {
mList.add(0, "设置环境IP为测试环境成功");
mList.add(0, "设置环境路径为测试环境");
}
setIpUrl(IpUrl);
mList.add(0, "设置环境IP成功");
int port = Integer.parseInt(et_port.getText().toString());
mList.add(0, "设置环境端口为:" + port);
setPort(port);
} else {
mList.add(0, "设置环境IP失败");
}
@@ -521,40 +525,57 @@ public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.

@Override
public void onSetPortStatus(int status) {

if (status == 0) {
mList.add(0, "设置环境端口成功");
String ipUrlStr = et_url.getText().toString();
mList.add(0, "设置环境url为:" + ipUrlStr);
setIpUrl(convertToASCII(ipUrlStr));
} else {
mList.add(0, "设置环境端口失败");
}
listAdapter.notifyDataSetChanged();
}

@Override
public void onSetIpUrlStatus(int status) {
// if (status == 0) {
// if (isTest) {
// mList.add(0, "设置环境路径为生产环境成功");
// isTest = false;
//
// } else {
// mList.add(0, "设置环境路径为测试环境成功");
// isTest = true;
//
// }
// } else {
// mList.add(0, "设置环境路径失败");
// }
// listAdapter.notifyDataSetChanged();
if (status == 0) {
if (isTest) {
mList.add(0, "设置环境路径为生产环境成功");
isTest = false;

} else {
mList.add(0, "设置环境路径为测试环境成功");
isTest = true;

}
mList.add(0, "设置环境url成功");
} else {
mList.add(0, "设置环境路径失败");
mList.add(0, "设置环境url失败");
}
listAdapter.notifyDataSetChanged();
}

@Override
public void onIpData(String ip) {

mList.add(0, "环境ip:" + ip);
listAdapter.notifyDataSetChanged();
}

@Override
public void onPortData(int port) {

mList.add(0, "环境端口:" + port);
listAdapter.notifyDataSetChanged();
}

@Override
public void onUrlData(String url) {

mList.add(0, "环境url:" + url);
listAdapter.notifyDataSetChanged();
}

@Override
@@ -583,7 +604,7 @@ public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.
@Override
public void tvSucceedListener(View v, String data) {
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().setWifiMac(wifimacMap.get(selectWifi)));
if (data.equals("") || data.length() > 8) {
if (data.equals("") || data.length() >= 8) {
setPaw(data);
} else {
Toast.makeText(WeightScaleWifiBleActivity.this, "密码格式不对", Toast.LENGTH_SHORT).show();
@@ -620,25 +641,50 @@ public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.
showFileChooser();
break;
case R.id.surroundings:
if (isTest) {
setIp(productIp);
mList.add(0, "设置环境IP为生产环境");

} else {
setIp(testIp);
mList.add(0, "设置环境IP为测试环境");


}
// if (isTest) {
// setIp(productIp);
// mList.add(0, "设置环境IP为生产环境");
//
// } else {
// setIp(testIp);
// mList.add(0, "设置环境IP为测试环境");
//
//
// }
String ipStr = et_ip.getText().toString();
setIp(convertToASCII(ipStr));
mList.add(0, "设置环境IP为:" + ipStr);
listAdapter.notifyDataSetChanged();

break;

case R.id.check_ip:
mList.add(0, "查看环境ip");
listAdapter.notifyDataSetChanged();
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().checkIp());
break;
case R.id.check_port:
mList.add(0, "查看环境端口");
listAdapter.notifyDataSetChanged();
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().checkPort());
break;
case R.id.check_url:
mList.add(0, "查看环境url");
listAdapter.notifyDataSetChanged();
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().checkUrl());
break;

}

}

private byte[] convertToASCII(String string) {
char[] ch = string.toCharArray();
byte[] tmp = new byte[ch.length];
for (int i = 0; i < ch.length; i++) {
tmp[i] = (byte) Integer.valueOf(ch[i]).intValue();
}
return tmp;
}


private void setIp(byte[] ips) {
if (ips.length <= 14)
@@ -666,6 +712,10 @@ public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.

}

private void setPort(int port) {
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentPort(port));
}

private void setIpUrl(byte[] setIpUrl) {
if (setIpUrl.length <= 14)
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentUrl(0, setIpUrl));
@@ -780,17 +830,24 @@ public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.
listAdapter.notifyDataSetChanged();
}

private int mOldProgress = -1;

@Override
public void onOtaProgress(float progress, int currentCount, int maxCount) {
mList.add(0, "otaProgress:"+progress);
listAdapter.notifyDataSetChanged();
if (mOldProgress != progress) {
mOldProgress = (int) progress;
mList.add(0, "otaProgress:" + progress);
listAdapter.notifyDataSetChanged();
}
}
});
} else {

}
}

private static final int FILE_SELECT_CODE = 0x1002;

private void showFileChooser() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");

+ 5
- 6
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WifiConfigActivity.java 查看文件

@@ -1,6 +1,5 @@
package aicare.net.cn.sdk.ailinksdkdemoandroid;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
@@ -19,6 +18,11 @@ import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioButton;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -33,10 +37,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import cn.net.aicare.modulelibrary.module.wifi.WifiConfig;
import cn.net.aicare.modulelibrary.module.wifi.WifiUtils;

@@ -63,7 +63,6 @@ public class WifiConfigActivity extends AppCompatActivity implements View.OnClic
private RadioButton kg, jing, stlb, lb;
private String mDeviceName;

@SuppressLint("SetTextI18n")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

+ 0
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/base/BleAppBaseActivity.java 查看文件

@@ -14,7 +14,6 @@ import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;


import java.lang.ref.WeakReference;

import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.HintDataDialogFragment;

+ 1
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/base/BleBaseActivity.java 查看文件

@@ -49,7 +49,7 @@ public abstract class BleBaseActivity extends AppCompatActivity {
*/
protected void startScanBle(long timeOut){
if (mBluetoothService!=null){
mBluetoothService.scanLeDevice(timeOut, BleConfig.UUID_SERVER_AILINK);
mBluetoothService.scanLeDevice(timeOut,BleConfig.UUID_SERVER_AILINK);
}
}


+ 16
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/config/BleDeviceConfig.java 查看文件

@@ -109,6 +109,11 @@ public class BleDeviceConfig {
*/
public final static int SPORTS_WATCH_BLE = 0x1D;

/**
* 蓝牙营养秤
*/
public final static int BLE_NUTRITION_SCALE = 0x0034;


/**
* 广播秤
@@ -140,6 +145,7 @@ public class BleDeviceConfig {
* 电滑板车
*/
public final static int SMART_SCOOTER =0x0025;
public final static int SMART_SCOOTER_CM02 =0x0033;

/**
* 共享充电器
@@ -180,4 +186,14 @@ public class BleDeviceConfig {
*/
public final static int CLEAR_SHAKE_HANDS = -6;

/**
* 跳绳
*/
public final static int ROPE_SKIPPING = 0x002f;

/**
* 广播营养秤
*/
public final static int BROADCAST_NUTRITION = 0x10003;

}

+ 3
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/AddUserDialog.java 查看文件

@@ -11,11 +11,13 @@ import android.widget.RadioGroup;
import android.widget.SeekBar;
import android.widget.TextView;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatDataUtil;
import cn.net.aicare.modulelibrary.module.BodyFatScale.User;


+ 2
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/DialogStringImageAdapter.java 查看文件

@@ -6,9 +6,10 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;


+ 1
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/HintDataDialogFragment.java 查看文件

@@ -18,6 +18,7 @@ import android.widget.TextView;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.L;

import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

+ 1
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/LoadingIosDialogFragment.java 查看文件

@@ -12,6 +12,7 @@ import android.view.View;
import android.view.ViewGroup;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;

+ 4
- 3
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/ShowListDialogFragment.java 查看文件

@@ -15,12 +15,13 @@ import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.L;
import aicare.net.cn.sdk.ailinksdkdemoandroid.view.MyItemDecoration;

import java.util.ArrayList;
import java.util.List;

import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

+ 2
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/dialog/WifiDialog.java 查看文件

@@ -12,12 +12,13 @@ import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentManager;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

public class WifiDialog extends DialogFragment implements View.OnClickListener {

/**

+ 2
- 2
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/find/FindDeviceActivity.java 查看文件

@@ -10,14 +10,14 @@ import android.widget.ListView;
import android.widget.Toast;

import com.pingwang.bluetoothlib.device.BleDevice;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.findDevice.FindConnectDeviceInfoBean;
import cn.net.aicare.modulelibrary.module.findDevice.FindDeviceData;

+ 2
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/find/FindDeviceAdapter.java 查看文件

@@ -6,9 +6,10 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;


+ 4
- 4
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/find/FindDeviceNewActivity.java 查看文件

@@ -16,15 +16,15 @@ import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.listener.OnScanFilterListener;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.BuildConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleAppBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.SP;
import aicare.net.cn.sdk.ailinksdkdemoandroid.view.MyItemDecoration;

import java.util.ArrayList;
import java.util.List;

import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

+ 329
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/ble_nutrition/BleNutritionActivity.java 查看文件

@@ -0,0 +1,329 @@
package aicare.net.cn.sdk.ailinksdkdemoandroid.modules.ble_nutrition;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RadioButton;

import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.bean.SupportUnitBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import cn.net.aicare.modulelibrary.module.BleNutrition.BleNutritionData;

public class BleNutritionActivity extends BleBaseActivity implements View.OnClickListener, BleNutritionData.BleNutritionCallback {

private static final String TAG = "Tag1";

private Button btn_clear;
private ListView list_view;
private Button btn_set_unit;
private Button btn_set_zero;
private List<RadioButton> rb_list;

private List<String> mList;
private ArrayAdapter mListAdapter;

private String mMac;
private BleDevice mBleDevice;

private BleNutritionData mBleNutritionData;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ble_nutrition);

btn_clear = findViewById(R.id.btn_clear);
list_view = findViewById(R.id.list_view);
btn_set_unit = findViewById(R.id.btn_set_unit);
btn_set_zero = findViewById(R.id.btn_set_zero);

btn_clear.setOnClickListener(this);
btn_set_unit.setOnClickListener(this);
btn_set_zero.setOnClickListener(this);

rb_list = new ArrayList<>();
rb_list.add(findViewById(R.id.rb_g));
rb_list.add(findViewById(R.id.rb_ml));
rb_list.add(findViewById(R.id.rb_lb_oz));
rb_list.add(findViewById(R.id.rb_oz));
rb_list.add(findViewById(R.id.rb_kg));
rb_list.add(findViewById(R.id.rb_jin));
rb_list.add(findViewById(R.id.rb_milk_ml));
rb_list.add(findViewById(R.id.rb_water_ml));
rb_list.add(findViewById(R.id.rb_milk_fl_oz));
rb_list.add(findViewById(R.id.rb_water_fl_oz));
rb_list.add(findViewById(R.id.rb_lb));

// 单位只能单选
for (RadioButton radioButton : rb_list) {
radioButton.setOnClickListener(v -> {
for (RadioButton rb : rb_list) {
rb.setChecked(rb == v);
}
});
}

// 获取Mac
mMac = getIntent().getStringExtra("mac");

// 初始化列表
mList = new ArrayList<>();
mListAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mList);
list_view.setAdapter(mListAdapter);
}

@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.btn_clear) {
// 清空文本框
clearText();
} else if (id == R.id.btn_set_unit) {
// 设置单位
setUnit();
} else if (id == R.id.btn_set_zero) {
// 去皮指令
setZero();
}
}

@Override
protected void onDestroy() {
if (mBluetoothService != null) {
mBluetoothService.disconnectAll();
}
super.onDestroy();
}

@Override
public void onServiceSuccess() {
mBleDevice = mBluetoothService.getBleDevice(mMac);
if (mBleDevice != null) {
mBleNutritionData = new BleNutritionData(mBleDevice);
mBleNutritionData.setBleNutritionCallback(this);
addText("连接成功:" + mMac);
}
}

@Override
public void onServiceErr() {

}

@Override
public void unbindServices() {

}

@Override
public void mcuBmVersion(String version) {
addText("MCU上发BM版本:" + version);
}

@Override
public void mcuSupportUnit(List<SupportUnitBean> list) {
String str = "";
for (SupportUnitBean supportUnitBean : list) {
str += supportUnitBean.toString() + ";";
if (supportUnitBean.getType() != null && supportUnitBean.getType().equals("8")) {
// 遍历所有单位,有这个支持单位就显示
for (int i = 0; i < rb_list.size(); i++) {
boolean hasUnit = false;
for (Integer integer : supportUnitBean.getSupportUnit()) {
if (integer != null && integer == i) {
hasUnit = true;
break;
}
}
rb_list.get(i).setEnabled(hasUnit);
}
// 再次遍历,如果选中了不支持的单位,就重新选择
boolean unitDisable = false;
for (int i = 0; i < rb_list.size(); i++) {
if (!rb_list.get(i).isEnabled() && rb_list.get(i).isChecked()) {
unitDisable = true;
rb_list.get(i).setChecked(false);
}
if (rb_list.get(i).isEnabled() && unitDisable) {
unitDisable = false;
rb_list.get(i).setChecked(true);
}
}
}
}
addText("MCU上发支持单位列表:\n" + str);
}

@Override
public void mcuWeight(int no, int weight, int unit, int decimal, int symbol, int type) {

float w = weight;
// 正负
if (symbol == 1) {
w *= -1;
}
// 小数点
w = (float) (w / Math.pow(10, decimal));
// 保留小数位
String weightStr = getPreFloatStr(w, decimal);

String str = "MCU上发重量:" + weightStr + getUnitStr(unit) + "\n流水号:" + no + ",原始重量:" + weight + ",单位:" + unit + ",小数点:" + decimal + ",符号:" + symbol + ",重量类型:" + type;
addText(str);
}

@Override
public void mcuUnitResult(int status) {
String statusStr = "";
switch (status) {
case 0:
statusStr = "成功";
break;
case 1:
statusStr = "失败";
break;
case 2:
statusStr = "不支持";
break;
}
String str = "MCU上发设置单位结果:" + statusStr;
addText(str);
}

@Override
public void mcuErr(int weightErr, int batteryErr) {
String weightErrStr = "";
switch (weightErr) {
case 0:
weightErrStr = "正常";
break;
case 1:
weightErrStr = "超重";
break;
}
String batteryErrStr = "";
switch (batteryErr) {
case 0:
batteryErrStr = "正常";
break;
case 1:
batteryErrStr = "低电";
break;
}
String str = "MCU上发异常报警:\n重量状态:" + weightErrStr + "\n电池状态:" + batteryErrStr;
addText(str);
}

private SimpleDateFormat sdf;

// 添加一条文本
private void addText(String text) {
if (sdf == null) {
sdf = new SimpleDateFormat("HH:mm:ss", Locale.US);
}
mList.add(sdf.format(System.currentTimeMillis()) + ":\n" + text);
mListAdapter.notifyDataSetChanged();
list_view.smoothScrollToPosition(mList.size() - 1);
}

// 清空文本
private void clearText() {
mList.clear();
mListAdapter.notifyDataSetChanged();
}

// 保留小数位
private String getPreFloatStr(float f, int decimal) {
BigDecimal bigDecimal = new BigDecimal(f);
return bigDecimal.setScale(decimal, BigDecimal.ROUND_HALF_UP).toString();
}

/**
* APP 发送归零指令
*/
private void setZero() {
if (mBleNutritionData != null) {
mBleNutritionData.setZero();
addText("APP下发去皮指令");
}
}

/**
* APP 下发单位
*/
private void setUnit() {
if (mBleNutritionData != null) {
int unit = -1;
for (int i = 0; i < rb_list.size(); i++) {
if (rb_list.get(i).isChecked()) {
unit = i;
break;
}
}
if (unit == -1) {
addText("APP下发单位:失败:未选择单位");
return;
}
mBleNutritionData.setUnit(unit);
addText("APP下发单位:" + unit + ":" + getUnitStr(unit));
}
}

/**
* 获取单位字符串
*
* @param unit 0
* @return g
*/
private String getUnitStr(int unit) {
String unitStr = "";
switch (unit) {
case 0x00:
unitStr = "g";
break;
case 0x01:
unitStr = "ml";
break;
case 0x02:
unitStr = "lb:oz";
break;
case 0x03:
unitStr = "oz";
break;
case 0x04:
unitStr = "kg";
break;
case 0x05:
unitStr = "斤";
break;
case 0x06:
unitStr = "牛奶ml";
break;
case 0x07:
unitStr = "水ml";
break;
case 0x08:
unitStr = "牛奶floz";
break;
case 0x09:
unitStr = "水floz";
break;
case 0x0A:
unitStr = "lb";
break;
}
return unitStr;
}
}

+ 2
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/blood_glucose/BloodGlucoseActivity.java 查看文件

@@ -12,19 +12,16 @@ import android.widget.RadioButton;
import com.pingwang.bluetoothlib.bean.SupportUnitBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.BloodGlucose.BloodGlucoseBleDeviceData;
import cn.net.aicare.modulelibrary.module.BloodGlucose.BloodGlucoseUtil;

/**
* 血糖仪
*/
public class BloodGlucoseActivity extends BleBaseActivity implements OnCallbackBle, BloodGlucoseBleDeviceData.BloodGlucoseCallback {

private Button support_unit, quest_status, showdata, test;

+ 2
- 2
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/blood_glucose/BloodGlucoseTestActivity.java 查看文件

@@ -9,12 +9,12 @@ import com.pingwang.bluetoothlib.bean.SupportUnitBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnBleCompanyListener;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.util.ArrayList;
import java.util.List;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.BloodGlucose.BloodGlucoseBleDeviceData;
import cn.net.aicare.modulelibrary.module.BloodGlucose.BloodGlucoseUtil;

+ 2
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/broadcast_height/BroadcastHeightActivity.java 查看文件

@@ -19,6 +19,8 @@ import com.pingwang.bluetoothlib.listener.OnCallbackDis;
import com.pingwang.bluetoothlib.listener.OnScanFilterListener;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import com.pinwang.ailinkble.AiLinkPwdUtil;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
@@ -26,16 +28,11 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import cn.net.aicare.modulelibrary.module.BroadcastScale.BroadcastScaleBleConfig;

/**
* 广播身高仪
*/
public class BroadcastHeightActivity extends BleBaseActivity implements OnCallbackDis, OnScanFilterListener {

private Context mContext;

+ 222
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/broadcast_nutrition/BroadNutritionActivity.java 查看文件

@@ -0,0 +1,222 @@
package aicare.net.cn.sdk.ailinksdkdemoandroid.modules.broadcast_nutrition;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.config.BleConfig;
import com.pingwang.bluetoothlib.listener.OnScanFilterListener;
import com.pingwang.bluetoothlib.utils.BleLog;
import com.pingwang.bluetoothlib.utils.BleStrUtils;
import com.pinwang.ailinkble.AiLinkPwdUtil;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class BroadNutritionActivity extends BleBaseActivity implements View.OnClickListener, OnScanFilterListener {

private ListView list_view;
private Button btn_start;
private Button btn_stop;
private Button btn_clear;

private List<String> mList;
private ArrayAdapter mListAdapter;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broadcast_nutrition);

list_view = findViewById(R.id.list_view);
btn_start = findViewById(R.id.btn_start);
btn_stop = findViewById(R.id.btn_stop);
btn_clear = findViewById(R.id.btn_clear);

btn_start.setOnClickListener(this);
btn_stop.setOnClickListener(this);
btn_clear.setOnClickListener(this);

mList = new ArrayList<>();
mListAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mList);
list_view.setAdapter(mListAdapter);
}

@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.btn_start) {
mBluetoothService.scanLeDevice(0, BleConfig.UUID_SERVER_BROADCAST_AILINK);
} else if (id == R.id.btn_stop) {
mBluetoothService.stopScan();
} else if (id == R.id.btn_clear) {
clearText();
}
}

@Override
protected void onDestroy() {
if (mBluetoothService != null) {
mBluetoothService.stopScan();
}
super.onDestroy();
}

@Override
public void onServiceSuccess() {
mBluetoothService.setOnScanFilterListener(this);
}

@Override
public void onServiceErr() {

}

@Override
public void unbindServices() {

}

@Override
public boolean onFilter(BleValueBean bleValueBean) {
if (bleValueBean.getCid() == 4) {
return true;
}
return false;
}

private String mMac;

@Override
public void onScanRecord(BleValueBean bleValueBean) {
byte[] manufacturerData = bleValueBean.getManufacturerData();
mMac = bleValueBean.getMac();
onNotifyData(manufacturerData, bleValueBean.getCid(), bleValueBean.getVid(), bleValueBean.getPid());
}

private SimpleDateFormat mSdf;

// 添加一条文本
private void addText(String text) {
if (mSdf == null) {
mSdf = new SimpleDateFormat("HH:mm:ss", Locale.US);
}
mList.add(mSdf.format(System.currentTimeMillis()) + ":\n" + text);
mListAdapter.notifyDataSetChanged();
list_view.smoothScrollToPosition(mList.size() - 1);
}

// 清空文本
private void clearText() {
mList.clear();
mListAdapter.notifyDataSetChanged();
}

private long mOldNumberId;

/**
* @param manufacturerData 自定义厂商数据0xFF后面的数据
* @param cid cid 设备类型
* @param vid vid
* @param pid pid
*/
public void onNotifyData(byte[] manufacturerData, int cid, int vid, int pid) {
if (manufacturerData == null) {
BleLog.i("Tag1", "接收到的数据:null");
return;
}
// if (manufacturerData.length >= 20) {
byte sum = manufacturerData[9];
byte[] data = new byte[10];
System.arraycopy(manufacturerData, 10, data, 0, data.length);
byte newSum = cmdSum(data);
if (newSum == sum) {
int numberId = data[0] & 0xff;//数据ID
// if (mOldNumberId == numberId) {
// //数据相同,已处理过了.不再处理
// return;
// }
mOldNumberId = numberId;
byte[] bytes;
if (cid != 0 || vid != 0 || pid != 0) {
bytes = AiLinkPwdUtil.decryptBroadcast(cid, vid, pid, data);
} else {
bytes = data;
}
Log.i("Tag1", "接收到的数据:" + BleStrUtils.byte2HexStr(bytes));
notifyData(bytes);
} else {
Log.i("Tag1", "校验和错误");
}
// }
}

/**
* 校验累加,从1开始加
*/
private byte cmdSum(byte[] data) {
byte sum = 0;
for (byte datum : data) {
sum += datum;
}
return sum;
}

/**
* 解析数据
*
* @param hex payloads
*/
private void notifyData(byte[] hex) {
if (hex.length >= 10) {
int no = hex[0] & 0xff;
int type = hex[1] & 0xff;
int weight = ((hex[2] & 0xff) << 16) + ((hex[3] & 0xff) << 8) + (hex[4] & 0xff);
int unit = (hex[5] & 0xff) & 0x0f;
int decimal = ((hex[5] & 0xff) & 0x70) >> 4;
int symbol = (hex[5] & 0xff) >> 7;
int battery = hex[6] & 0xff;
int err = hex[7] & 0xff;

float weightValue = weight;
if (symbol == 1) {
weightValue *= -1;
}
weightValue /= Math.pow(10, decimal);
String weightStr = getPreFloatStr(weightValue, decimal);
switch (unit) {
default:
case 0:
weightStr += "g";
break;
case 1:
weightStr += "ml";
break;
}

addText("Mac:" + mMac + "\n流水号:" + no + "\n测量标识符:" + type + "\n原始重量:" + weight + ",单位:" + unit + ",小数点:" + decimal + ",正负:" + symbol + "\n重量:" + weightStr + "\n电量:" + battery + "\n异常标志位:" + err);
}
}

/**
* 四舍五入
*
* @param f 小数
* @return float
*/
protected String getPreFloatStr(float f, int decimal) {
BigDecimal dc = new BigDecimal(f);
return dc.setScale(decimal, BigDecimal.ROUND_HALF_UP).toString();
}
}

+ 2
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/coffee_scale/CoffeeScaleActivity.java 查看文件

@@ -12,20 +12,17 @@ import android.widget.RadioButton;

import com.pingwang.bluetoothlib.bean.SupportUnitBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.CoffeeScale.CoffeeScaleData;

/**
* 咖啡秤
*/
public class CoffeeScaleActivity extends BleBaseActivity implements View.OnClickListener, CoffeeScaleData.CoffeeScaleCallback {

private static final String TAG = "Tag1";

+ 2
- 2
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/food_temp/FoodTempActivity.java 查看文件

@@ -10,6 +10,8 @@ import android.widget.RadioButton;
import android.widget.Spinner;

import com.pingwang.bluetoothlib.device.BleDevice;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -17,8 +19,6 @@ import java.util.Calendar;
import java.util.List;
import java.util.Locale;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.FoodTemp.FoodTempData;


+ 2
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/share_charger/ShareChargerActivity.java 查看文件

@@ -10,20 +10,17 @@ import android.widget.SeekBar;
import android.widget.TextView;

import com.pingwang.bluetoothlib.device.BleDevice;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.ShareCharger.ShareChargerData;

/**
* 共享充电器
*/
public class ShareChargerActivity extends BleBaseActivity implements View.OnClickListener, ShareChargerData.ShareChargerCallback {

private Button btn_set;

+ 2
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/share_condom/ShareCondomActivity.java 查看文件

@@ -13,21 +13,18 @@ import android.widget.SeekBar;
import android.widget.TextView;

import com.pingwang.bluetoothlib.device.BleDevice;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.ShareCondom.ShareCondomData;

/**
* 共享套套机
*/
public class ShareCondomActivity extends BleBaseActivity implements View.OnClickListener, ShareCondomData.ShareCondomCallback {

private static final int MSG_TIMING = 100;

+ 2
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/share_socket/ShareSocketActivity.java 查看文件

@@ -17,6 +17,8 @@ import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.listener.OnScanFilterListener;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import aicare.net.cn.sdk.ailinksdkdemoandroid.R;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -25,15 +27,10 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;

import aicare.net.cn.sdk.ailinksdkdemoandroid.R;
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import cn.net.aicare.modulelibrary.module.ShareSocket.ShareSocketData;

/**
* 共享插座
*/
public class ShareSocketActivity extends BleBaseActivity implements View.OnClickListener, ShareSocketData.ShareSocketCallback, OnCallbackBle, OnScanFilterListener {

private static final int MSG_TEST_START_SCAN = 100;

+ 101
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/utils/EightBodyFatAlgorithms.java 查看文件

@@ -0,0 +1,101 @@
package aicare.net.cn.sdk.ailinksdkdemoandroid.utils;

import com.holtek.libHTBodyfat.HTBodyBasicInfo;
import com.holtek.libHTBodyfat.HTBodyResultAllBody;
import aicare.net.cn.sdk.ailinksdkdemoandroid.EightBodyfatAdc;

import java.util.Locale;


public class EightBodyFatAlgorithms {


public EightBodyFatAlgorithms() {
}

private static class AlgorithmsHolder {
private static EightBodyFatAlgorithms algorithmsUnit = new EightBodyFatAlgorithms();
}


public static EightBodyFatAlgorithms getInstance() {
return AlgorithmsHolder.algorithmsUnit;

}


public EightBodyFatBean getAlgorithmsData(int algorithms, int sex, int height, float weight_kg, int age, EightBodyfatAdc eightBodyfatAdc) {
EightBodyFatBean eightBodyFatBean = new EightBodyFatBean();
switch (algorithms) {
//和泰算法
case 1:
default:

HTBodyBasicInfo basicInfo = new HTBodyBasicInfo(sex, height, weight_kg, age);
basicInfo.htZAllBodyImpedance = eightBodyfatAdc.getAdcRightBody();
basicInfo.htZLeftLegImpedance = eightBodyfatAdc.getAdcLeftFoot();
basicInfo.htZRightLegImpedance = eightBodyfatAdc.getAdcRightFoot();
basicInfo.htZLeftArmImpedance = eightBodyfatAdc.getAdcLeftHand();
basicInfo.htZRightArmImpedance = eightBodyfatAdc.getAdcRightHand();
basicInfo.htTwoLegsImpedance = eightBodyfatAdc.getAdcFoot();
basicInfo.htTwoArmsImpedance = eightBodyfatAdc.getAdcHand();
HTBodyResultAllBody resultTwoLegs = new HTBodyResultAllBody();
int errorType = resultTwoLegs.getBodyfatWithBasicInfo(basicInfo);
if (errorType == HTBodyBasicInfo.ErrorNone) {
eightBodyFatBean.setBmi(Adecimal(resultTwoLegs.htBMI));
eightBodyFatBean.setBmr((float) resultTwoLegs.htBMR);
eightBodyFatBean.setUvi((float) resultTwoLegs.htVFAL);
eightBodyFatBean.setBm(String.valueOf((float) resultTwoLegs.htBoneKg));
eightBodyFatBean.setBfr(Adecimal(resultTwoLegs.htBodyfatPercentage));
eightBodyFatBean.setVwc(Adecimal(resultTwoLegs.htWaterPercentage));
eightBodyFatBean.setRom(Adecimal(resultTwoLegs.htMusclePercentage));
eightBodyFatBean.setBodyAge(resultTwoLegs.htBodyAge);
eightBodyFatBean.setPp(Adecimal(resultTwoLegs.htProteinPercentage));
eightBodyFatBean.setSfr(Adecimal(resultTwoLegs.htBodyfatSubcut));
eightBodyFatBean.setFatMassBody(String.valueOf(resultTwoLegs.htBodyfatKgTrunk));
eightBodyFatBean.setFatMassLeftTop(String.valueOf(resultTwoLegs.htBodyfatKgLeftArm));
eightBodyFatBean.setFatMassLeftBottom(String.valueOf(resultTwoLegs.htBodyfatKgLeftLeg));
eightBodyFatBean.setFatMassRightTop(String.valueOf(resultTwoLegs.htBodyfatKgRightArm));
eightBodyFatBean.setFatMassRightBottom(String.valueOf(resultTwoLegs.htBodyfatKgRightLeg));
// eightBodyFatBean.setFatMass(resultTwoLegs.htBodyfatKg);
eightBodyFatBean.setMuscleMassBody(String.valueOf(resultTwoLegs.htMuscleKgTrunk));
eightBodyFatBean.setMuscleMassLeftTop(String.valueOf(resultTwoLegs.htMuscleKgLeftArm));
eightBodyFatBean.setMuscleMassLeftBottom(String.valueOf(resultTwoLegs.htMuscleKgLeftLeg));
eightBodyFatBean.setMuscleMassRightTop(String.valueOf(resultTwoLegs.htMuscleKgRightArm));
eightBodyFatBean.setMuscleMassRightBottom(String.valueOf(resultTwoLegs.htMuscleKgRightLeg));
// eightBodyFatBean.setMusleMass(resultTwoLegs.htMuscleKg);
// eightBodyFatBean.setStandardWeight(resultTwoLegs.htIdealWeightKg);
// eightBodyFatBean.setWeightWithoutFat(resultTwoLegs.htBodyfatFreeMass);
// eightBodyFatBean.setWeightControl((weight_kg - resultTwoLegs.htIdealWeightKg));
// eightBodyFatBean.setFatLevel(HealthyStatusUtil.ObesitylevelsStatus(weight_kg, (float) resultTwoLegs.htIdealWeightKg));
// double muscle = (resultTwoLegs.htMuscleKgLeftArm + resultTwoLegs.htMuscleKgLeftLeg + resultTwoLegs.htMuscleKgRightArm + resultTwoLegs.htMuscleKgRightLeg);
// eightBodyFatBean.setMusleMassLimbs(Adecimal(muscle / (height * height) * 10000));

eightBodyFatBean.setAdcFoot((resultTwoLegs.htZLeftLeg + resultTwoLegs.htZRightLeg));
eightBodyFatBean.setAdcHand((resultTwoLegs.htZLeftArm + resultTwoLegs.htZRightArm));
eightBodyFatBean.setAdcLeftHand(resultTwoLegs.htZLeftArm);
eightBodyFatBean.setAdcRightHand(resultTwoLegs.htZRightArm);
eightBodyFatBean.setAdcLeftFoot(resultTwoLegs.htZLeftLeg);
eightBodyFatBean.setAdcRightFoot(resultTwoLegs.htZRightLeg);
eightBodyFatBean.setAdcLeftBody(resultTwoLegs.htZAllBody);
eightBodyFatBean.setAdcRightBody(resultTwoLegs.htZAllBody);
eightBodyFatBean.setAdcRightHandLeftFoot((resultTwoLegs.htZRightArm + resultTwoLegs.htZLeftLeg));
eightBodyFatBean.setAdcLeftHandRightFoot((resultTwoLegs.htZLeftArm + resultTwoLegs.htZRightLeg));
eightBodyFatBean.setAdcBody(resultTwoLegs.htZAllBody);

}


}
return eightBodyFatBean;
}


private float Adecimal(double data) {


return Float.parseFloat(String.format(Locale.US, "%.1f", data));


}
}

+ 335
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/utils/EightBodyFatBean.java 查看文件

@@ -0,0 +1,335 @@
package aicare.net.cn.sdk.ailinksdkdemoandroid.utils;

public class EightBodyFatBean {
private String weight; //体重,
private float bmi; //体质指数,
private float bfr; //体脂率,
private float sfr; //皮下脂肪率,
private float uvi; //内脏脂肪率,
private float rom; //肌肉率,
private float bmr; //基础代谢率,
private String bm; //骨骼质量,
private float vwc; //水含量,
private int bodyAge; //身体年龄,
private float pp; //蛋白率,
private double adcFoot; //双脚阻抗,
private double adcHand;//双手阻抗
private double adcLeftHand; //左手阻抗
private double adcRightHand; //右手阻抗
private double adcLeftFoot; //左脚阻抗
private double adcRightFoot; //右脚阻抗
private double adcLeftBody;
private double adcRightBody;
private double adcRightHandLeftFoot;
private double adcLeftHandRightFoot;
private double adcBody;
private int arithmetic;
private int heartRate;
private String fatMassRightTop; //体脂-右上
private String fatMassRightBottom; //体脂-右下
private String fatMassLeftTop; //体脂-左上
private String fatMassLeftBottom; //体脂-左下
private String fatMassBody; //体脂-躯干
private String muscleMassRightTop; //肌肉-右上
private String muscleMassRightBottom; //肌肉-右下
private String muscleMassLeftTop; //肌肉-左上
private String muscleMassLeftBottom; //肌肉-左下
private String muscleMassBody; //肌肉-躯干


private String testAdc;






public String getTestAdc() {
return testAdc;
}

public void setTestAdc(String testAdc) {
this.testAdc = testAdc;
}



public String getWeight() {
return weight;
}

public void setWeight(String weight) {
this.weight = weight;
}

public float getBmi() {
return bmi;
}

public void setBmi(float bmi) {
this.bmi = bmi;
}

public float getBfr() {
return bfr;
}

public void setBfr(float bfr) {
this.bfr = bfr;
}

public float getSfr() {
return sfr;
}

public void setSfr(float sfr) {
this.sfr = sfr;
}

public float getUvi() {
return uvi;
}

public void setUvi(float uvi) {
this.uvi = uvi;
}

public float getRom() {
return rom;
}

public void setRom(float rom) {
this.rom = rom;
}

public float getBmr() {
return bmr;
}

public void setBmr(float bmr) {
this.bmr = bmr;
}

public String getBm() {
return bm;
}

public void setBm(String bm) {
this.bm = bm;
}

public float getVwc() {
return vwc;
}

public void setVwc(float vwc) {
this.vwc = vwc;
}

public int getBodyAge() {
return bodyAge;
}

public void setBodyAge(int bodyAge) {
this.bodyAge = bodyAge;
}

public float getPp() {
return pp;
}

public void setPp(float pp) {
this.pp = pp;
}

public double getAdcFoot() {
return adcFoot;
}

public void setAdcFoot(double adcFoot) {
this.adcFoot = adcFoot;
}

public double getAdcHand() {
return adcHand;
}

public void setAdcHand(double adcHand) {
this.adcHand = adcHand;
}

public double getAdcLeftHand() {
return adcLeftHand;
}

public void setAdcLeftHand(double adcLeftHand) {
this.adcLeftHand = adcLeftHand;
}

public double getAdcRightHand() {
return adcRightHand;
}

public void setAdcRightHand(double adcRightHand) {
this.adcRightHand = adcRightHand;
}

public double getAdcLeftFoot() {
return adcLeftFoot;
}

public void setAdcLeftFoot(double adcLeftFoot) {
this.adcLeftFoot = adcLeftFoot;
}

public double getAdcRightFoot() {
return adcRightFoot;
}

public void setAdcRightFoot(double adcRightFoot) {
this.adcRightFoot = adcRightFoot;
}

public double getAdcLeftBody() {
return adcLeftBody;
}

public void setAdcLeftBody(double adcLeftBody) {
this.adcLeftBody = adcLeftBody;
}

public double getAdcRightBody() {
return adcRightBody;
}

public void setAdcRightBody(double adcRightBody) {
this.adcRightBody = adcRightBody;
}

public double getAdcRightHandLeftFoot() {
return adcRightHandLeftFoot;
}

public void setAdcRightHandLeftFoot(double adcRightHandLeftFoot) {
this.adcRightHandLeftFoot = adcRightHandLeftFoot;
}

public double getAdcLeftHandRightFoot() {
return adcLeftHandRightFoot;
}

public void setAdcLeftHandRightFoot(double adcLeftHandRightFoot) {
this.adcLeftHandRightFoot = adcLeftHandRightFoot;
}

public double getAdcBody() {
return adcBody;
}

public void setAdcBody(double adcBody) {
this.adcBody = adcBody;
}

public String getFatMassRightTop() {
return fatMassRightTop;
}

public void setFatMassRightTop(String fatMassRightTop) {
this.fatMassRightTop = fatMassRightTop;
}

public String getFatMassRightBottom() {
return fatMassRightBottom;
}

public void setFatMassRightBottom(String fatMassRightBottom) {
this.fatMassRightBottom = fatMassRightBottom;
}

public String getFatMassLeftTop() {
return fatMassLeftTop;
}

public void setFatMassLeftTop(String fatMassLeftTop) {
this.fatMassLeftTop = fatMassLeftTop;
}

public String getFatMassLeftBottom() {
return fatMassLeftBottom;
}

public void setFatMassLeftBottom(String fatMassLeftBottom) {
this.fatMassLeftBottom = fatMassLeftBottom;
}

public String getFatMassBody() {
return fatMassBody;
}

public void setFatMassBody(String fatMassBody) {
this.fatMassBody = fatMassBody;
}

public String getMuscleMassRightTop() {
return muscleMassRightTop;
}

public void setMuscleMassRightTop(String muscleMassRightTop) {
this.muscleMassRightTop = muscleMassRightTop;
}

public String getMuscleMassRightBottom() {
return muscleMassRightBottom;
}

public void setMuscleMassRightBottom(String muscleMassRightBottom) {
this.muscleMassRightBottom = muscleMassRightBottom;
}

public String getMuscleMassLeftTop() {
return muscleMassLeftTop;
}

public void setMuscleMassLeftTop(String muscleMassLeftTop) {
this.muscleMassLeftTop = muscleMassLeftTop;
}

public String getMuscleMassLeftBottom() {
return muscleMassLeftBottom;
}

public void setMuscleMassLeftBottom(String muscleMassLeftBottom) {
this.muscleMassLeftBottom = muscleMassLeftBottom;
}

public String getMuscleMassBody() {
return muscleMassBody;
}

public void setMuscleMassBody(String muscleMassBody) {
this.muscleMassBody = muscleMassBody;
}

public int getArithmetic() {
return arithmetic;
}

public void setArithmetic(int arithmetic) {
this.arithmetic = arithmetic;
}

public void setHeartRate(int heartRate) {
this.heartRate = heartRate;
}

public int getHeartRate() {
return heartRate;
}

@Override
public String toString() {
return "EightBodyFatBean{" + "weight='" + weight + '\'' + ", bmi=" + bmi + ", bfr=" + bfr + ", sfr=" + sfr + ", uvi=" + uvi + ", rom=" + rom + ", bmr=" + bmr + ", bm='" + bm + '\'' + ", " +
"vwc=" + vwc + ", bodyAge=" + bodyAge + ", pp=" + pp + ", adcFoot=" + adcFoot + ", adcHand=" + adcHand + ", adcLeftHand=" + adcLeftHand + ", adcRightHand=" + adcRightHand + ", " +
"adcLeftFoot=" + adcLeftFoot + ", adcRightFoot=" + adcRightFoot + ", adcLeftBody=" + adcLeftBody + ", adcRightBody=" + adcRightBody + ", adcRightHandLeftFoot=" + adcRightHandLeftFoot + ", adcLeftHandRightFoot=" + adcLeftHandRightFoot + ", adcBody=" + adcBody + ", arithmetic=" + arithmetic + ", heartRate=" + heartRate + ", fatMassRightTop='" + fatMassRightTop + '\'' + ", fatMassRightBottom='" + fatMassRightBottom + '\'' + ", fatMassLeftTop='" + fatMassLeftTop + '\'' + ", fatMassLeftBottom='" + fatMassLeftBottom + '\'' + ", fatMassBody='" + fatMassBody + '\'' + ", muscleMassRightTop='" + muscleMassRightTop + '\'' + ", muscleMassRightBottom='" + muscleMassRightBottom + '\'' + ", muscleMassLeftTop='" + muscleMassLeftTop + '\'' + ", muscleMassLeftBottom='" + muscleMassLeftBottom + '\'' + ", muscleMassBody='" + muscleMassBody + '\'' + ", testAdc='" + testAdc + '\'' + '}';
}
}

+ 0
- 110
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/utils/MyBleStrUtils.java 查看文件

@@ -40,114 +40,4 @@ public class MyBleStrUtils {
}


/**
* int到byte[] 由高位到低位
* @param i 需要转换为byte数组的整行值。
* @return byte数组
*/
public static byte[] intToByteArray(int i) {
byte[] result = new byte[4];
result[0] = (byte)((i >> 24) & 0xFF);
result[1] = (byte)((i >> 16) & 0xFF);
result[2] = (byte)((i >> 8) & 0xFF);
result[3] = (byte)(i & 0xFF);
return result;
}

/**
* 时间戳(秒)转byte数组 由高位到低位
* @param time 时间戳,精确到秒
* @return byte[5]数组
*/
public static byte[] getTimestampByte(long time) {
byte[] result = new byte[5];
result[4] = (byte)((time >> 32) & 0xFF);
result[3] = (byte)((time >> 24) & 0xFF);
result[2] = (byte)((time >> 16) & 0xFF);
result[1] = (byte)((time >> 8) & 0xFF);
result[0] = (byte)(time & 0xFF);
return result;
}


/**
* byte[]转long
* @param bytes 需要转换的数组
* @param isBig 是否为大端序
* @return 数值
*/
public static long byteArrayToLong(byte[] bytes,boolean isBig) {
long value=0;
int length = bytes.length;
if (isBig){
for(int i = length; i >0; i--) {
int shift= ((length-1)-(length-i)) * 8;
value +=(bytes[(i-1)] & 0xFF) << shift;
}
}else {
for(int i = 0; i <length; i++) {
int shift= ((length-1)-i) * 8;
value +=(bytes[i] & 0xFF) << shift;
}
}
return value;
}


/**
* (16进制)
* BLE蓝牙返回的byte[]
* byte[]转字符串
*/
public static String getMac(byte[] b,boolean isBig) {
if (b == null)
return "";
StringBuilder hs = new StringBuilder();
String stmp;
if (isBig){
for (byte aB : b) {
int a = aB & 0XFF;
stmp = getHexString(a);
if (stmp.length() == 1)
hs.append("0").append(stmp);
else
hs.append(stmp);
hs.append(":");
}
}else {

for (int i = b.length - 1; i >= 0; i--) {
byte aB=b[i];
int a = aB & 0XFF;
stmp = getHexString(a);
if (stmp.length() == 1)
hs.append("0").append(stmp);
else
hs.append(stmp);
hs.append(":");
}
}

hs.deleteCharAt(hs.length()-1);
return hs.toString();
}



/**
* mac地址转byte
* @param mac
* @return
*/
public static byte[] getDeviceMacByte(String mac) {
byte[] macByte = new byte[6];
if (mac.contains(":")) {
String[] macArr = mac.split(":");
for (int i = 0; i < macArr.length; i++) {
macByte[macArr.length - i - 1] = (byte) Integer.parseInt(macArr[i], 16);
}
}
return macByte;
}

}

+ 37
- 1
app/src/main/res/layout/activity_ble.xml 查看文件

@@ -36,7 +36,16 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="暂停" />

<Button
android:id="@+id/btnDis"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="断开" />
<Button
android:id="@+id/btnConnect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="连接" />

</LinearLayout>

@@ -298,6 +307,33 @@
android:text="1,60,1,1000" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:padding="5dp"
android:layout_height="wrap_content">

<EditText
android:id="@+id/et_set_device"
android:layout_width="0dp"
android:layout_weight="1"
android:digits="0123456789abcdefABCDEF, "
android:layout_height="wrap_content" />

<Button
android:id="@+id/btn_set_device"
android:text="设置设备信息"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<Button
android:id="@+id/btn_get_device"
android:text="读取设备信息"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

</LinearLayout>

</ScrollView>

+ 154
- 0
app/src/main/res/layout/activity_ble_nutrition.xml 查看文件

@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="horizontal">

<Button
android:id="@+id/btn_clear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="清空" />

</LinearLayout>

<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?android:attr/listDivider" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:orientation="horizontal">

<Button
android:id="@+id/btn_set_zero"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="去皮指令" />

<Button
android:id="@+id/btn_set_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置单位" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:orientation="horizontal">

<RadioButton
android:id="@+id/rb_g"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="g" />

<RadioButton
android:id="@+id/rb_ml"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ml" />

<RadioButton
android:id="@+id/rb_lb_oz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="lb:oz" />

<RadioButton
android:id="@+id/rb_oz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="oz" />

<RadioButton
android:id="@+id/rb_kg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="kg" />

<RadioButton
android:id="@+id/rb_jin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="斤" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:orientation="horizontal">

<RadioButton
android:id="@+id/rb_milk_ml"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="牛奶ml" />

<RadioButton
android:id="@+id/rb_water_ml"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="水ml" />

<RadioButton
android:id="@+id/rb_milk_fl_oz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="牛奶floz" />

<RadioButton
android:id="@+id/rb_water_fl_oz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="水floz" />

<RadioButton
android:id="@+id/rb_lb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="lb" />

</LinearLayout>

</LinearLayout>

</ScrollView>

<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?android:attr/listDivider" />

<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />

</LinearLayout>

+ 42
- 0
app/src/main/res/layout/activity_broadcast_nutrition.xml 查看文件

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">

<Button
android:id="@+id/btn_start"
android:text="开始扫描"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<Button
android:id="@+id/btn_stop"
android:text="停止扫描"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<Button
android:id="@+id/btn_clear"
android:text="清空文本"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>

<View
android:background="#CCCCCC"
android:layout_width="match_parent"
android:layout_height="1px" />

<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</LinearLayout>

+ 7
- 7
app/src/main/res/layout/activity_health_bracelet.xml 查看文件

@@ -225,7 +225,7 @@
android:text="靠近报警阀值:"
/>

<com.pinwang.ailinkblesdk.view.SeekBarMin
<aicare.net.cn.sdk.ailinksdkdemoandroid.view.SeekBarMin
android:id="@+id/seekBar1"
style="@style/Widget.AppCompat.SeekBar"
android:layout_width="0dp"
@@ -255,7 +255,7 @@
android:text="接收的阀值次数:"
/>

<com.pinwang.ailinkblesdk.view.SeekBarMin
<aicare.net.cn.sdk.ailinksdkdemoandroid.view.SeekBarMin
android:id="@+id/seekBar2"
style="@style/Widget.AppCompat.SeekBar"
android:layout_width="0dp"
@@ -285,7 +285,7 @@
android:text="脱离报警时间:"
/>

<com.pinwang.ailinkblesdk.view.SeekBarMin
<aicare.net.cn.sdk.ailinksdkdemoandroid.view.SeekBarMin
android:id="@+id/seekBar3"
style="@style/Widget.AppCompat.SeekBar"
android:layout_width="0dp"
@@ -315,7 +315,7 @@
android:text="脱离报警次数:"
/>

<com.pinwang.ailinkblesdk.view.SeekBarMin
<aicare.net.cn.sdk.ailinksdkdemoandroid.view.SeekBarMin
android:id="@+id/seekBar4"
style="@style/Widget.AppCompat.SeekBar"
android:layout_width="0dp"
@@ -344,7 +344,7 @@
android:text="Gsensor灵敏度:"
/>

<com.pinwang.ailinkblesdk.view.SeekBarMin
<aicare.net.cn.sdk.ailinksdkdemoandroid.view.SeekBarMin
android:id="@+id/seekBar5"
style="@style/Widget.AppCompat.SeekBar"
android:layout_width="0dp"
@@ -374,7 +374,7 @@
android:text="Gsensor不动的脱机时间:"
/>

<com.pinwang.ailinkblesdk.view.SeekBarMin
<aicare.net.cn.sdk.ailinksdkdemoandroid.view.SeekBarMin
android:id="@+id/seekBar6"
style="@style/Widget.AppCompat.SeekBar"
android:layout_width="0dp"
@@ -404,7 +404,7 @@
android:text="马达震动时间:"
/>

<com.pinwang.ailinkblesdk.view.SeekBarMin
<aicare.net.cn.sdk.ailinksdkdemoandroid.view.SeekBarMin
android:id="@+id/seekBar7"
style="@style/Widget.AppCompat.SeekBar"
android:layout_width="0dp"

+ 25
- 0
app/src/main/res/layout/activity_main.xml 查看文件

@@ -79,6 +79,7 @@
android:id="@+id/btn_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:text="电子锁" />


@@ -314,6 +315,30 @@
android:layout_height="wrap_content"
android:text="共享套套机" />

<Button
android:id="@+id/btn_rope_skip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跳绳" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<Button
android:id="@+id/btn_broadcast_nutrition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="广播营养秤" />

<Button
android:id="@+id/btn_ble_nutrition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蓝牙营养秤" />

</LinearLayout>



+ 113
- 0
app/src/main/res/layout/activity_rope_skipping.xml 查看文件

@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical">


<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<Button
android:id="@+id/btn_syn_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="同步时间搓" />


<Button
android:id="@+id/btn_free_jump"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动自由跳" />

<Button
android:id="@+id/btn_time_jump"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动倒时跳" />
<Button
android:id="@+id/btn_num_jump"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动倒数跳" />

</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>

<Button
android:id="@+id/btn_stop_free_jump"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止自由跳" />

<Button
android:id="@+id/btn_stop_time_jump"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止倒时跳" />
<Button
android:id="@+id/btn_stop_num_jump"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止倒数跳" />
<Button
android:id="@+id/btn_default_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="默认100个" />



</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>


<Button
android:id="@+id/btn_default_timer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="默认60秒" />
<Button
android:id="@+id/btn_get_history"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取历史记录" />


<Button
android:id="@+id/btn_clear_log"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="清空日志" />

<Button
android:id="@+id/btn_bind"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确认绑定" />
</LinearLayout>

<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2.5"
android:padding="10dp"
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll">


</ListView>

</LinearLayout>

+ 1
- 1
app/src/main/res/layout/activity_show_ble.xml 查看文件

@@ -50,7 +50,7 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="5dp"
android:text="AiLink" />
/>

<TextView
android:layout_width="wrap_content"

+ 24
- 1
app/src/main/res/layout/activity_test_ota.xml 查看文件

@@ -53,7 +53,12 @@
android:text="握手:false"
/>


<Button
android:id="@+id/btn_start_ota"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始OTA"
/>


</LinearLayout>
@@ -91,6 +96,24 @@
android:text="OTA:580"
/>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
>

<Button
android:id="@+id/btn_ota_bk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OTA:BK"
/>




</LinearLayout>

</LinearLayout>

+ 226
- 140
app/src/main/res/layout/activity_weight_scale_wifi_ble.xml 查看文件

@@ -1,147 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/wifistatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查看wifi状态" />

<Button
android:id="@+id/scan_wifi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_toEndOf="@+id/wifistatus"
android:text="搜索wifi热点" />

<Button
android:id="@+id/sn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/scan_wifi"
android:layout_marginTop="8dp"
android:text="查看设备did号" />

<EditText
android:id="@+id/select_wifi_et"
android:layout_width="90dp"
android:layout_height="wrap_content"

android:layout_marginStart="22dp"
android:layout_toEndOf="@+id/scan_wifi"
android:hint="选择wifi序号"
android:inputType="number"
android:textSize="14dp" />

<Button
android:id="@+id/connect_wifi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

android:layout_below="@+id/select_wifi_et"
android:layout_marginStart="13dp"
android:layout_marginTop="11dp"
android:layout_toEndOf="@+id/disconnect"
android:text="发起连接" />

<Button
android:id="@+id/disconnect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/scan_wifi"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@+id/sn"
android:text="断开连接" />


<Button
android:id="@+id/setedmac"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/sn"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:text="获取希望设置的MAC" />

<Button
android:id="@+id/setedpaw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/sn"
android:layout_toEndOf="@id/setedmac"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:text="获取希望设置的密码" />
<Button
android:id="@+id/setedname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/setedmac"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:text="获取当前连接wifi名称" />
<Button
android:id="@+id/ota"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/setedmac"
android:layout_toEndOf="@+id/setedname"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:text="ota" />

<Button
android:id="@+id/surroundings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/setedmac"
android:layout_toEndOf="@+id/ota"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:text="切换环境" />

<RadioGroup
android:id="@+id/unit"
android:layout_below="@+id/setedname"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<ScrollView
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/kg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="kg"/>
<RadioButton
android:id="@+id/jin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="斤"/>
<RadioButton
android:id="@+id/st_lb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="st:lb"/>
<RadioButton
android:id="@+id/lb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="lb"/>
</RadioGroup>
android:layout_height="0dp"
android:layout_weight="1.6">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:id="@+id/wifistatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查看wifi状态" />

<Button
android:id="@+id/scan_wifi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_toEndOf="@+id/wifistatus"
android:text="搜索wifi热点" />

<Button
android:id="@+id/sn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/scan_wifi"
android:layout_marginTop="8dp"
android:text="查看设备did号" />

<EditText
android:id="@+id/select_wifi_et"
android:layout_width="90dp"
android:layout_height="wrap_content"

android:layout_marginStart="22dp"
android:layout_toEndOf="@+id/scan_wifi"
android:hint="选择wifi序号"
android:inputType="number"
android:textSize="14dp" />

<Button
android:id="@+id/connect_wifi"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

android:layout_below="@+id/select_wifi_et"
android:layout_marginStart="13dp"
android:layout_marginTop="11dp"
android:layout_toEndOf="@+id/disconnect"
android:text="发起连接" />

<Button
android:id="@+id/disconnect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/scan_wifi"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@+id/sn"
android:text="断开连接" />


<Button
android:id="@+id/setedmac"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/sn"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:text="获取希望设置的MAC" />

<Button
android:id="@+id/setedpaw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/sn"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@id/setedmac"
android:text="获取希望设置的密码" />

<Button
android:id="@+id/setedname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/setedmac"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:text="获取当前连接wifi名称" />

<Button
android:id="@+id/ota"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/setedmac"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@+id/setedname"
android:text="ota" />

<EditText
android:id="@+id/et_ip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/setedname"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:inputType="text"
android:maxLines="1"
android:text="47.113.114.70" />

<EditText
android:id="@+id/et_port"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/et_ip"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:inputType="number"
android:maxLines="1"
android:text="8092" />

<EditText
android:id="@+id/et_url"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/et_port"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:inputType="text"
android:maxLines="1"
android:text="/index/" />

<Button
android:id="@+id/surroundings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/et_url"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:text="切换环境" />

<Button
android:id="@+id/check_ip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/et_url"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@id/surroundings"
android:text="查看ip" />

<Button
android:id="@+id/check_port"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/et_url"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@id/check_ip"
android:text="查看端口" />

<Button
android:id="@+id/check_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/et_url"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:layout_toEndOf="@id/check_port"
android:text="查看url" />

<RadioGroup
android:id="@+id/unit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/check_ip"
android:orientation="horizontal">

<RadioButton
android:id="@+id/kg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="kg" />

<RadioButton
android:id="@+id/jin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="斤" />

<RadioButton
android:id="@+id/st_lb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="st:lb" />

<RadioButton
android:id="@+id/lb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="lb" />
</RadioGroup>


</RelativeLayout>
</ScrollView>


<ListView
android:id="@+id/log_list"
android:layout_marginTop="20dp"
android:layout_below="@id/unit"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="0dp"
android:layout_below="@id/unit"
android:layout_marginTop="20dp"
android:layout_weight="1">

</ListView>
</RelativeLayout>
</LinearLayout>

正在加载...
取消
保存