@@ -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' | |||
} |
@@ -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://设置系统当前时间返回 |
@@ -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 { | |||
@@ -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; | |||
} | |||
} | |||
} | |||
} |
@@ -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; |
@@ -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, |
@@ -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) { | |||
//进入睡眠 | |||
} |
@@ -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; |
@@ -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; | |||
@@ -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请求必须设置允许输出 |
@@ -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; |
@@ -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); | |||
} | |||
@@ -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; | |||
@@ -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> |
@@ -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; |
@@ -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; |
@@ -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 = ""; |
@@ -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); | |||
} | |||
@@ -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(); | |||
} | |||
} | |||
} |
@@ -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; |
@@ -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 |
@@ -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) { |
@@ -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; |
@@ -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; | |||
@@ -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; |
@@ -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; | |||
/** |
@@ -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> |
@@ -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; |
@@ -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; |
@@ -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(); | |||
} | |||
} | |||
} |
@@ -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(){ |
@@ -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("*/*"); |
@@ -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); |
@@ -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; |
@@ -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); | |||
} | |||
} | |||
@@ -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; | |||
} |
@@ -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; | |||
@@ -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; | |||
@@ -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; |
@@ -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; |
@@ -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; |
@@ -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 { | |||
/** |
@@ -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; |
@@ -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; | |||
@@ -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; |
@@ -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; | |||
} | |||
} |
@@ -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; |
@@ -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; |
@@ -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; |
@@ -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(); | |||
} | |||
} |
@@ -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"; |
@@ -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; | |||
@@ -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; |
@@ -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; |
@@ -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; |
@@ -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)); | |||
} | |||
} |
@@ -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 + '\'' + '}'; | |||
} | |||
} |
@@ -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; | |||
} | |||
} |
@@ -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> |
@@ -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> |
@@ -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> |
@@ -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" |
@@ -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> | |||
@@ -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> |
@@ -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" |
@@ -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> |
@@ -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> |