applicationId "aicare.net.cn.sdk.ailinksdkdemoandroid" | applicationId "aicare.net.cn.sdk.ailinksdkdemoandroid" | ||||
minSdkVersion 19 | minSdkVersion 19 | ||||
targetSdkVersion 29 | targetSdkVersion 29 | ||||
versionCode 3 | |||||
versionName "1.5.2" | |||||
versionCode 4 | |||||
versionName "1.5.4" | |||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||||
} | } | ||||
buildTypes { | buildTypes { | ||||
implementation 'androidx.appcompat:appcompat:1.1.0' | implementation 'androidx.appcompat:appcompat:1.1.0' | ||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' | implementation 'androidx.constraintlayout:constraintlayout:1.1.3' | ||||
testImplementation 'junit:junit:4.12' | testImplementation 'junit:junit:4.12' | ||||
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.6.9' | |||||
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.5.3' | |||||
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.7.4' | |||||
implementation 'com.github.elinkthings:AILinkSDKOtaLibraryAndroid:1.0.0' | |||||
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.5.4' | |||||
implementation 'androidx.recyclerview:recyclerview:1.1.0' | implementation 'androidx.recyclerview:recyclerview:1.1.0' | ||||
implementation 'com.jakewharton:butterknife:10.2.0' | implementation 'com.jakewharton:butterknife:10.2.0' | ||||
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' | annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' |
<activity android:name=".ConnectBleTestActivity" /> | <activity android:name=".ConnectBleTestActivity" /> | ||||
<activity android:name=".ADWeightScaleCmdActivity" /> | <activity android:name=".ADWeightScaleCmdActivity" /> | ||||
<activity android:name=".ADWeightScaleUserActivity" /> | <activity android:name=".ADWeightScaleUserActivity" /> | ||||
<activity android:name=".WeightScaleWifiBle" /> | |||||
<activity android:name=".WeightScaleBle"/> | |||||
<activity android:name=".WeightScaleWifiBleActivity" /> | |||||
<activity android:name=".WeightScaleBleActivity"/> | |||||
<activity android:name=".WifiConfigActivity"/> | <activity android:name=".WifiConfigActivity"/> | ||||
<activity android:name=".EightBodyfatActivity"/> | <activity android:name=".EightBodyfatActivity"/> | ||||
<activity android:name=".TestOtaActivity"/> | <activity android:name=".TestOtaActivity"/> |
import java.util.List; | import java.util.List; | ||||
import java.util.UUID; | import java.util.UUID; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils; | |||||
import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||
import cn.net.aicare.modulelibrary.module.BroadcastScale.BroadcastScaleBleConfig; | import cn.net.aicare.modulelibrary.module.BroadcastScale.BroadcastScaleBleConfig; | ||||
import cn.net.aicare.modulelibrary.module.BroadcastScale.BroadcastScaleDeviceData; | import cn.net.aicare.modulelibrary.module.BroadcastScale.BroadcastScaleDeviceData; | ||||
//-----------------通知------------------- | //-----------------通知------------------- | ||||
private String mOldData=""; | |||||
@Override | @Override | ||||
public void onData(byte[] hex, int type) { | |||||
public void onData(byte[] dataOriginal,byte[] hex, int type) { | |||||
String data = ""; | String data = ""; | ||||
if (hex != null) | if (hex != null) | ||||
data = BleStrUtils.byte2HexStr(hex); | data = BleStrUtils.byte2HexStr(hex); | ||||
if (type == 100) { | |||||
mList.add(TimeUtils.getTime() + "send->" + data); | |||||
} else { | |||||
mList.add(TimeUtils.getTime() + "notify->" + data); | |||||
if (mOldData.equals(data)){ | |||||
return; | |||||
} | } | ||||
mOldData=data; | |||||
mList.add(TimeUtils.getTime() + "数据ID" + type+" ,||解密数据:"+data+" ,||原始数据:"+ BleStrUtils.byte2HexStr(dataOriginal)); | |||||
mHandler.sendEmptyMessage(REFRESH_DATA); | mHandler.sendEmptyMessage(REFRESH_DATA); | ||||
} | } | ||||
break; | break; | ||||
} | } | ||||
String statusStr = "状态="; | String statusStr = "状态="; | ||||
switch (status) { | switch (status) { | ||||
case BroadcastScaleBleConfig.GET_WEIGHT_TESTING: | case BroadcastScaleBleConfig.GET_WEIGHT_TESTING: | ||||
statusStr += "测阻抗中"; | statusStr += "测阻抗中"; | ||||
break; | break; | ||||
case BroadcastScaleBleConfig.GET_IMPEDANCE_SUCCESS: | case BroadcastScaleBleConfig.GET_IMPEDANCE_SUCCESS: | ||||
statusStr += "测阻抗成功"; | |||||
statusStr+= "测阻抗成功"; | |||||
break; | break; | ||||
case BroadcastScaleBleConfig.GET_IMPEDANCE_FAIL: | case BroadcastScaleBleConfig.GET_IMPEDANCE_FAIL: | ||||
statusStr += "测阻抗失败"; | statusStr += "测阻抗失败"; | ||||
case BroadcastScaleBleConfig.GET_TEST_FINISH: | case BroadcastScaleBleConfig.GET_TEST_FINISH: | ||||
statusStr += "测量完成"; | statusStr += "测量完成"; | ||||
break; | break; | ||||
default: | |||||
statusStr+=Integer.toHexString(status); | |||||
break; | |||||
} | } | ||||
String weightStr = BleDensityUtil.getInstance().holdDecimals(weight, 1); | |||||
String weightStr = BleDensityUtil.getInstance().holdDecimals(weight, weightDecimal); | |||||
if (weightNegative == 1) { | if (weightNegative == 1) { | ||||
weightStr = "-" + weightStr; | weightStr = "-" + weightStr; | ||||
} | } | ||||
showData += "\n实时体重=" + weightStr + ";小数位=" + weightDecimal + ";单位=" + weightUnit + ";" + weightUnitStr; | showData += "\n实时体重=" + weightStr + ";小数位=" + weightDecimal + ";单位=" + weightUnit + ";" + weightUnitStr; | ||||
} | } | ||||
showData += "\n阻抗=" + adc; | showData += "\n阻抗=" + adc; | ||||
if (tempNegative == 1) { | |||||
showData += "\n温度=" + (-temp / 10F) + tempUnitStr; | |||||
if (temp == 65535) { | |||||
//不支持温度 | |||||
showData += "\n温度=暂不支持"; | |||||
} else { | } else { | ||||
showData += "\n温度=" + (temp / 10F) + tempUnitStr; | |||||
if (tempNegative == 1) { | |||||
showData += "\n温度=" + (-temp / 10F) + tempUnitStr; | |||||
} else { | |||||
showData += "\n温度=" + (temp / 10F) + tempUnitStr; | |||||
} | |||||
if (mTemp != temp) { | |||||
mTemp = temp; | |||||
tv_broadcast_temp.setText((mTemp / 10F) + tempUnitStr); | |||||
} | |||||
} | } | ||||
showData += "\n算法ID=" + algorithmId; | showData += "\n算法ID=" + algorithmId; | ||||
if (mWeightUnit != weightUnit) { | if (mWeightUnit != weightUnit) { | ||||
mWeightUnit = weightUnit; | mWeightUnit = weightUnit; | ||||
showWeightUnit(mWeightUnit); | showWeightUnit(mWeightUnit); | ||||
} | } | ||||
if (mTemp != temp) { | |||||
mTemp = temp; | |||||
tv_broadcast_temp.setText((mTemp / 10F) + tempUnitStr); | |||||
} | |||||
mList.add(showData); | mList.add(showData); | ||||
mHandler.sendEmptyMessage(REFRESH_DATA); | mHandler.sendEmptyMessage(REFRESH_DATA); | ||||
@Override | @Override | ||||
public void OnDID(int cid, int vid, int pid) { | public void OnDID(int cid, int vid, int pid) { | ||||
String didStr = "cid:" + cid + "||vid:" + vid + "||pid:" + pid; | String didStr = "cid:" + cid + "||vid:" + vid + "||pid:" + pid; | ||||
mList.add(TimeUtils.getTime() + "ID:" + didStr); | |||||
mHandler.sendEmptyMessage(REFRESH_DATA); | |||||
// if (tv_broadcast_did!=null){ | |||||
// tv_broadcast_did.setText(didStr); | |||||
// } | |||||
} | } | ||||
@Override | @Override | ||||
public void onScanRecord(BleValueBean bleValueBean) { | public void onScanRecord(BleValueBean bleValueBean) { | ||||
if (TextUtils.isEmpty(mAddress)&&bleValueBean.isBroadcastModule()) { | |||||
if (TextUtils.isEmpty(mAddress) && bleValueBean.isBroadcastModule()) { | |||||
mAddress = bleValueBean.getMac(); | mAddress = bleValueBean.getMac(); | ||||
if (tv_broadcast_mac != null) { | if (tv_broadcast_mac != null) { | ||||
tv_broadcast_mac.setText(mAddress); | tv_broadcast_mac.setText(mAddress); | ||||
} | } | ||||
} | } | ||||
//地址相同,并且是广播秤 | //地址相同,并且是广播秤 | ||||
if (mAddress.equalsIgnoreCase(bleValueBean.getMac()) && bleValueBean.isBroadcastModule()) { | if (mAddress.equalsIgnoreCase(bleValueBean.getMac()) && bleValueBean.isBroadcastModule()) { |
intent.setClass(ShowBleActivity.this, aicare.net.cn.sdk.ailinksdkdemoandroid.HeightCmdActivity.class); | intent.setClass(ShowBleActivity.this, aicare.net.cn.sdk.ailinksdkdemoandroid.HeightCmdActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE: | case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE: | ||||
intent.setClass(ShowBleActivity.this, aicare.net.cn.sdk.ailinksdkdemoandroid.WeightScaleBle.class); | |||||
intent.setClass(ShowBleActivity.this, WeightScaleBleActivity.class); | |||||
break; | break; | ||||
case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_AD: | case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_AD: | ||||
intent.setClass(ShowBleActivity.this, aicare.net.cn.sdk.ailinksdkdemoandroid.ADWeightScaleCmdActivity.class); | intent.setClass(ShowBleActivity.this, aicare.net.cn.sdk.ailinksdkdemoandroid.ADWeightScaleCmdActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_WIFI_BLE: | case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_WIFI_BLE: | ||||
intent.setClass(ShowBleActivity.this, aicare.net.cn.sdk.ailinksdkdemoandroid.WeightScaleWifiBle.class); | |||||
intent.setClass(ShowBleActivity.this, WeightScaleWifiBleActivity.class); | |||||
break; | break; | ||||
case BleDeviceConfig.TOOTHBRUSH_WIFI_BLE: | case BleDeviceConfig.TOOTHBRUSH_WIFI_BLE: | ||||
intent.setClass(ShowBleActivity.this, aicare.net.cn.sdk.ailinksdkdemoandroid.ToothBrushWifiBleActivity.class); | intent.setClass(ShowBleActivity.this, aicare.net.cn.sdk.ailinksdkdemoandroid.ToothBrushWifiBleActivity.class); |
import com.pingwang.bluetoothlib.listener.OnCallbackDis; | import com.pingwang.bluetoothlib.listener.OnCallbackDis; | ||||
import com.pingwang.bluetoothlib.utils.BleLog; | import com.pingwang.bluetoothlib.utils.BleLog; | ||||
import com.pingwang.bluetoothlib.utils.BleStrUtils; | import com.pingwang.bluetoothlib.utils.BleStrUtils; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.List; | import java.util.List; | ||||
import java.util.Locale; | import java.util.Locale; | ||||
import java.util.UUID; | import java.util.UUID; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.utils.TimeUtils; | |||||
import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||
UUID UUID_NOTIFY = UUID.fromString(notify); | UUID UUID_NOTIFY = UUID.fromString(notify); | ||||
if (bleDevice != null && sendUuidServer != null) { | if (bleDevice != null && sendUuidServer != null) { | ||||
// bleDevice.setNotify(notifyOpen); | // bleDevice.setNotify(notifyOpen); | ||||
bleDevice.setOpenNotify(UUID_NOTIFY,sendUuidServer); | |||||
bleDevice.setNotify(sendUuidServer,UUID_NOTIFY); | |||||
} | } | ||||
} | } |
import android.widget.TextView; | import android.widget.TextView; | ||||
import android.widget.Toast; | import android.widget.Toast; | ||||
import com.elinkthings.bleotalibrary.dialog.DialogOtaManager; | |||||
import com.elinkthings.bleotalibrary.listener.OnBleOTAListener; | |||||
import com.pingwang.bluetoothlib.BleBaseActivity; | import com.pingwang.bluetoothlib.BleBaseActivity; | ||||
import com.pingwang.bluetoothlib.device.BleDevice; | import com.pingwang.bluetoothlib.device.BleDevice; | ||||
import com.pingwang.bluetoothlib.listener.OnBleDeviceDataListener; | import com.pingwang.bluetoothlib.listener.OnBleDeviceDataListener; | ||||
import com.pingwang.bluetoothlib.listener.OnBleOTAListener; | |||||
import com.pingwang.bluetoothlib.listener.OnCallbackBle; | import com.pingwang.bluetoothlib.listener.OnCallbackBle; | ||||
import com.pingwang.bluetoothlib.utils.BleLog; | import com.pingwang.bluetoothlib.utils.BleLog; | ||||
String byFileName = FileUtils.getByFileName()+mOTAFileName; | String byFileName = FileUtils.getByFileName()+mOTAFileName; | ||||
mList.add(TimeUtils.getTime() + "OTA已开始,请耐心等待"); | mList.add(TimeUtils.getTime() + "OTA已开始,请耐心等待"); | ||||
mHandler.sendEmptyMessage(REFRESH_DATA); | mHandler.sendEmptyMessage(REFRESH_DATA); | ||||
mBleDevice.setOnDialogOTAListener(this); | |||||
mBleDevice.startDialogOta(byFileName); | |||||
DialogOtaManager build = DialogOtaManager.newBuilder().setOnBleOTAListener(this).setFilePath(byFileName).build(mBleDevice); | |||||
build.startOta(); | |||||
break; | break; | ||||
if (mBluetoothService != null) { | if (mBluetoothService != null) { | ||||
mBleDevice = mBluetoothService.getBleDevice(mAddress); | mBleDevice = mBluetoothService.getBleDevice(mAddress); | ||||
mBluetoothService.setOnCallback(this); | mBluetoothService.setOnCallback(this); | ||||
if (mBleDevice != null) { | |||||
mBleDevice.setOnDialogOTAListener(this); | |||||
} | |||||
} | } | ||||
} | } | ||||
private int progressOld; | private int progressOld; | ||||
@Override | @Override | ||||
public void onOtaProgress(float progress) { | |||||
public void onOtaProgress(float progress, int currentCount, int maxCount) { | |||||
int progressInt = (int) progress; | int progressInt = (int) progress; | ||||
if (progressOld != progressInt) { | if (progressOld != progressInt) { | ||||
progressOld = progressInt; | progressOld = progressInt; |
package aicare.net.cn.sdk.ailinksdkdemoandroid; | package aicare.net.cn.sdk.ailinksdkdemoandroid; | ||||
import android.content.pm.ActivityInfo; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.os.Handler; | import android.os.Handler; | ||||
import android.os.Message; | import android.os.Message; | ||||
@Override | @Override | ||||
protected void onCreate(@Nullable Bundle savedInstanceState) { | protected void onCreate(@Nullable Bundle savedInstanceState) { | ||||
super.onCreate(savedInstanceState); | super.onCreate(savedInstanceState); | ||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//禁止横屏 | |||||
setContentView(R.layout.activity_tooth_brush_wifi_ble); | setContentView(R.layout.activity_tooth_brush_wifi_ble); | ||||
findViewById(R.id.wifistatus).setOnClickListener(this); | findViewById(R.id.wifistatus).setOnClickListener(this); | ||||
findViewById(R.id.sn).setOnClickListener(this); | findViewById(R.id.sn).setOnClickListener(this); | ||||
findViewById(R.id.default_try_out).setOnClickListener(this); | findViewById(R.id.default_try_out).setOnClickListener(this); | ||||
findViewById(R.id.default_time_mode).setOnClickListener(this); | findViewById(R.id.default_time_mode).setOnClickListener(this); | ||||
findViewById(R.id.default_mode).setOnClickListener(this); | findViewById(R.id.default_mode).setOnClickListener(this); | ||||
// findViewById(R.id.ota).setOnClickListener(this); | |||||
mEditText = findViewById(R.id.select_wifi_et); | mEditText = findViewById(R.id.select_wifi_et); | ||||
select_gears_et = findViewById(R.id.select_gears_et); | select_gears_et = findViewById(R.id.select_gears_et); | ||||
mToothBrushWiFiBleUtilsData.queryBleStatus(); | mToothBrushWiFiBleUtilsData.queryBleStatus(); | ||||
break; | break; | ||||
case R.id.sn: | case R.id.sn: | ||||
mToothBrushWiFiBleUtilsData.getDeviceId(); | |||||
mToothBrushWiFiBleUtilsData.getDevicedid(); | |||||
break; | break; | ||||
case R.id.scan_wifi: | case R.id.scan_wifi: | ||||
mToothBrushWiFiBleUtilsData.scanWifi(); | mToothBrushWiFiBleUtilsData.scanWifi(); | ||||
if (data.equals("") || data.length() > 8) { | if (data.equals("") || data.length() > 8) { | ||||
dataPaw = data.trim(); | dataPaw = data.trim(); | ||||
mToothBrushWiFiBleUtilsData.setWifiMac(wifimacMap.get(selectWifi)); | |||||
mToothBrushWiFiBleUtilsData.setWifimac(wifimacMap.get(selectWifi)); | |||||
} else { | } else { | ||||
Toast.makeText(ToothBrushWifiBleActivity.this, "密码格式不对", Toast.LENGTH_SHORT).show(); | Toast.makeText(ToothBrushWifiBleActivity.this, "密码格式不对", Toast.LENGTH_SHORT).show(); | ||||
} | } | ||||
} | } | ||||
if (gears != null) { | if (gears != null) { | ||||
try { | try { | ||||
mToothBrushWiFiBleUtilsData.setTryOut(Integer.parseInt(gears[1]), Integer.parseInt(gears[2]),0,0); | |||||
mToothBrushWiFiBleUtilsData.setTryOut(Integer.parseInt(gears[1]), Integer.parseInt(gears[2]), 0, 0); | |||||
} catch (NumberFormatException e) { | } catch (NumberFormatException e) { | ||||
e.printStackTrace(); | e.printStackTrace(); | ||||
Toast.makeText(this, "请输入时长,档位,档位级别(数字加符号)", Toast.LENGTH_SHORT).show(); | Toast.makeText(this, "请输入时长,档位,档位级别(数字加符号)", Toast.LENGTH_SHORT).show(); | ||||
break; | break; | ||||
case R.id.default_time_mode: | case R.id.default_time_mode: | ||||
mToothBrushWiFiBleUtilsData.getDefaultGearAndDuration(); | |||||
mToothBrushWiFiBleUtilsData.getdefaultGearAndDuration(); | |||||
break; | break; | ||||
} | |||||
// case R.id.ota: | |||||
// | |||||
// mToothBrushWiFiBleUtilsData.setOta(); | |||||
// | |||||
// break; | |||||
} | |||||
} | } | ||||
mMHandler.sendEmptyMessage(ToRefreUi); | mMHandler.sendEmptyMessage(ToRefreUi); | ||||
} | } | ||||
@Override | |||||
public void onOTA(int status) { | |||||
String s = " "; | |||||
switch (status) { | |||||
case 0x00: | |||||
s = "wifiOTA 成功"; | |||||
break; | |||||
case 0x01: | |||||
s = "wifiOTA 失败"; | |||||
break; | |||||
case 0x02: | |||||
s = "不支持 wifiOTA"; | |||||
break; | |||||
case 0x03: | |||||
s = "模块主动开始 wifiOTA(MCU 收到该指 令后不能断电,需要等待 OTA 成功或者失败)"; | |||||
break; | |||||
} | |||||
mList.add(0, s); | |||||
mMHandler.sendEmptyMessage(ToRefreUi); | |||||
} | |||||
@Override | @Override | ||||
public void onShowData(String data) { | public void onShowData(String data) { | ||||
package aicare.net.cn.sdk.ailinksdkdemoandroid; | package aicare.net.cn.sdk.ailinksdkdemoandroid; | ||||
import android.content.pm.ActivityInfo; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.os.Handler; | import android.os.Handler; | ||||
import android.os.Message; | import android.os.Message; | ||||
import com.pingwang.bluetoothlib.device.SendBleBean; | import com.pingwang.bluetoothlib.device.SendBleBean; | ||||
import com.pingwang.bluetoothlib.listener.OnCallbackBle; | import com.pingwang.bluetoothlib.listener.OnCallbackBle; | ||||
import com.pingwang.bluetoothlib.utils.BleStrUtils; | import com.pingwang.bluetoothlib.utils.BleStrUtils; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig; | |||||
import java.lang.ref.WeakReference; | import java.lang.ref.WeakReference; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.List; | import java.util.List; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig; | |||||
import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||
import cn.net.aicare.modulelibrary.module.BodyFatScale.AppHistoryRecordBean; | import cn.net.aicare.modulelibrary.module.BodyFatScale.AppHistoryRecordBean; | ||||
import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatBleUtilsData; | import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatBleUtilsData; | ||||
import cn.net.aicare.modulelibrary.module.BodyFatScale.McuHistoryRecordBean; | import cn.net.aicare.modulelibrary.module.BodyFatScale.McuHistoryRecordBean; | ||||
import cn.net.aicare.modulelibrary.module.BodyFatScale.User; | import cn.net.aicare.modulelibrary.module.BodyFatScale.User; | ||||
public class WeightScaleBle extends BleBaseActivity implements View.OnClickListener, OnCallbackBle, BodyFatBleUtilsData.BleBodyFatCallback { | |||||
private String TAG = WeightScaleBle.class.getName(); | |||||
public class WeightScaleBleActivity extends BleBaseActivity implements View.OnClickListener, OnCallbackBle, BodyFatBleUtilsData.BleBodyFatCallback { | |||||
private String TAG = WeightScaleBleActivity.class.getName(); | |||||
private String mAddress; | private String mAddress; | ||||
private List<String> mlogList; | private List<String> mlogList; | ||||
private List<String> mUserlogList; | private List<String> mUserlogList; | ||||
@Override | @Override | ||||
protected void onCreate(@Nullable Bundle savedInstanceState) { | protected void onCreate(@Nullable Bundle savedInstanceState) { | ||||
super.onCreate(savedInstanceState); | super.onCreate(savedInstanceState); | ||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//禁止横屏 | |||||
setContentView(R.layout.activity_weight_scale_ble); | setContentView(R.layout.activity_weight_scale_ble); | ||||
initView(); | initView(); | ||||
setUnitinit(); | setUnitinit(); | ||||
@Override | @Override | ||||
public void onError(int code) { | public void onError(int code) { | ||||
mlogList.add(0, "历史记录Mcu:" + code); | |||||
mlogList.add(0, "错误码:" + code); | |||||
mMHandler.sendEmptyMessage(ToRefreUi); | mMHandler.sendEmptyMessage(ToRefreUi); | ||||
} | } | ||||
mMHandler.sendEmptyMessage(ToRefreUi); | mMHandler.sendEmptyMessage(ToRefreUi); | ||||
} | } | ||||
@Override | |||||
public void onOtaCallback(int status) { | |||||
} | |||||
@Override | |||||
public void onSetIpStatus(int status) { | |||||
} | |||||
@Override | |||||
public void onSetIpUrlStatus(int status) { | |||||
} | |||||
@Override | @Override | ||||
public void onClick(View v) { | public void onClick(View v) { |
package aicare.net.cn.sdk.ailinksdkdemoandroid; | package aicare.net.cn.sdk.ailinksdkdemoandroid; | ||||
import android.content.Intent; | |||||
import android.content.pm.ActivityInfo; | |||||
import android.net.Uri; | |||||
import android.os.Bundle; | import android.os.Bundle; | ||||
import android.os.Handler; | import android.os.Handler; | ||||
import android.os.Message; | import android.os.Message; | ||||
import android.widget.RadioButton; | import android.widget.RadioButton; | ||||
import android.widget.Toast; | import android.widget.Toast; | ||||
import com.elinkthings.bleotalibrary.listener.OnBleOTAListener; | |||||
import com.pingwang.bluetoothlib.BleBaseActivity; | import com.pingwang.bluetoothlib.BleBaseActivity; | ||||
import com.pingwang.bluetoothlib.bean.BleValueBean; | import com.pingwang.bluetoothlib.bean.BleValueBean; | ||||
import com.pingwang.bluetoothlib.config.CmdConfig; | import com.pingwang.bluetoothlib.config.CmdConfig; | ||||
import com.pingwang.bluetoothlib.listener.OnCallbackBle; | import com.pingwang.bluetoothlib.listener.OnCallbackBle; | ||||
import com.pingwang.bluetoothlib.utils.BleLog; | import com.pingwang.bluetoothlib.utils.BleLog; | ||||
import com.pingwang.bluetoothlib.utils.BleStrUtils; | import com.pingwang.bluetoothlib.utils.BleStrUtils; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig; | |||||
import java.lang.ref.WeakReference; | import java.lang.ref.WeakReference; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.HashMap; | import java.util.HashMap; | ||||
import java.util.List; | import java.util.List; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig; | |||||
import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||
import cn.net.aicare.modulelibrary.module.BodyFatScale.AppHistoryRecordBean; | import cn.net.aicare.modulelibrary.module.BodyFatScale.AppHistoryRecordBean; | ||||
import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatBleUtilsData; | import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatBleUtilsData; | ||||
import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatRecord; | import cn.net.aicare.modulelibrary.module.BodyFatScale.BodyFatRecord; | ||||
import cn.net.aicare.modulelibrary.module.BodyFatScale.McuHistoryRecordBean; | import cn.net.aicare.modulelibrary.module.BodyFatScale.McuHistoryRecordBean; | ||||
public class WeightScaleWifiBle extends BleBaseActivity implements View.OnClickListener, OnCallbackBle, BodyFatBleUtilsData.BleBodyFatCallback, BodyFatBleUtilsData.BleBodyFatWiFiCallback { | |||||
private String TAG = WeightScaleWifiBle.class.getName(); | |||||
public class WeightScaleWifiBleActivity extends BleBaseActivity implements View.OnClickListener, OnCallbackBle, BodyFatBleUtilsData.BleBodyFatCallback, BodyFatBleUtilsData.BleBodyFatWiFiCallback { | |||||
private String TAG = WeightScaleWifiBleActivity.class.getName(); | |||||
private String mAddress; | private String mAddress; | ||||
private List<String> mList; | private List<String> mList; | ||||
private ArrayAdapter listAdapter; | private ArrayAdapter listAdapter; | ||||
private MHandler mMHandler; | private MHandler mMHandler; | ||||
private EditText mEditText; | private EditText mEditText; | ||||
private RadioButton kg, jing, stlb, lb; | 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 boolean isTest = false; | |||||
@Override | @Override | ||||
protected void onCreate(@Nullable Bundle savedInstanceState) { | protected void onCreate(@Nullable Bundle savedInstanceState) { | ||||
super.onCreate(savedInstanceState); | super.onCreate(savedInstanceState); | ||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//禁止横屏 | |||||
setContentView(R.layout.activity_weight_scale_wifi_ble); | setContentView(R.layout.activity_weight_scale_wifi_ble); | ||||
findViewById(R.id.wifistatus).setOnClickListener(this); | findViewById(R.id.wifistatus).setOnClickListener(this); | ||||
findViewById(R.id.sn).setOnClickListener(this); | findViewById(R.id.sn).setOnClickListener(this); | ||||
findViewById(R.id.setedname).setOnClickListener(this); | findViewById(R.id.setedname).setOnClickListener(this); | ||||
findViewById(R.id.setedpaw).setOnClickListener(this); | findViewById(R.id.setedpaw).setOnClickListener(this); | ||||
findViewById(R.id.setedmac).setOnClickListener(this); | findViewById(R.id.setedmac).setOnClickListener(this); | ||||
// findViewById(R.id.ota).setOnClickListener(this); | |||||
// findViewById(R.id.surroundings).setOnClickListener(this); | |||||
mEditText = findViewById(R.id.select_wifi_et); | mEditText = findViewById(R.id.select_wifi_et); | ||||
kg = findViewById(R.id.kg); | kg = findViewById(R.id.kg); | ||||
jing = findViewById(R.id.jin); | jing = findViewById(R.id.jin); | ||||
mMHandler.sendEmptyMessage(ToRefreUi); | mMHandler.sendEmptyMessage(ToRefreUi); | ||||
} | } | ||||
@Override | |||||
public void onOtaCallback(int status) { | |||||
switch (status) { | |||||
case 0x00: | |||||
mList.add(0, "ota状态:" + status + " wifiOTA成功"); | |||||
break; | |||||
case 0x01: | |||||
mList.add(0, "ota状态:" + status + " wifiOTA失败"); | |||||
break; | |||||
case 0x02: | |||||
mList.add(0, "ota状态:" + status + " 不支持wifiOTA"); | |||||
break; | |||||
case 0x03: | |||||
mList.add(0, "ota状态:" + status + " 模块主动开始wifiOTA(MCU收到该指令后不能断电,需要等待OTA成功或者失败)"); | |||||
break; | |||||
} | |||||
mMHandler.sendEmptyMessage(ToRefreUi); | |||||
} | |||||
@Override | @Override | ||||
public void onAdc(int adc, int algorithmic) { | public void onAdc(int adc, int algorithmic) { | ||||
mList.add(0, "阻抗:" + adc + " 算法位:" + algorithmic); | mList.add(0, "阻抗:" + adc + " 算法位:" + algorithmic); | ||||
@Override | @Override | ||||
public void requestSynTime() { | public void requestSynTime() { | ||||
mList.add(0,"同步时间"); | |||||
mList.add(0, "同步时间"); | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().synTime()); | bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().synTime()); | ||||
} | } | ||||
@Override | @Override | ||||
public void setTimeCallback(int type,int status) { | |||||
public void setTimeCallback(int type, int status) { | |||||
String msg = ""; | String msg = ""; | ||||
if (type == CmdConfig.SET_SYS_TIME) { | if (type == CmdConfig.SET_SYS_TIME) { | ||||
msg = "设置系统当前时间:"; | msg = "设置系统当前时间:"; | ||||
private boolean issetMac = false; | private boolean issetMac = false; | ||||
/** | /** | ||||
* | |||||
* @param type | * @param type | ||||
* @param status {@link BodyFatDataUtil#STATUS_SUCCESS} | * @param status {@link BodyFatDataUtil#STATUS_SUCCESS} | ||||
* | |||||
*/ | */ | ||||
@Override | @Override | ||||
public void OnSetWifiNameOrPwdOrConnectCallback(int type, int status) { | public void OnSetWifiNameOrPwdOrConnectCallback(int type, int status) { | ||||
if (type == BodyFatDataUtil.SET_WIFI_MAC) { | if (type == BodyFatDataUtil.SET_WIFI_MAC) { | ||||
mList.add(0, "获取到设置的mac地址状态 " + status); | mList.add(0, "获取到设置的mac地址状态 " + status); | ||||
if (status == BodyFatDataUtil.STATUS_SUCCESS){ | |||||
if (status == BodyFatDataUtil.STATUS_SUCCESS) { | |||||
issetMac = true; | issetMac = true; | ||||
}else { | |||||
} else { | |||||
} | } | ||||
mMHandler.sendEmptyMessage(ToRefreUi); | mMHandler.sendEmptyMessage(ToRefreUi); | ||||
} | } | ||||
@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(); | |||||
} | |||||
@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(); | |||||
} | |||||
@Override | @Override | ||||
public void onClick(View v) { | public void onClick(View v) { | ||||
int id = v.getId(); | int id = v.getId(); | ||||
if (data.equals("") || data.length() > 8) { | if (data.equals("") || data.length() > 8) { | ||||
setPaw(data); | setPaw(data); | ||||
} else { | } else { | ||||
Toast.makeText(WeightScaleWifiBle.this, "密码格式不对", Toast.LENGTH_SHORT).show(); | |||||
Toast.makeText(WeightScaleWifiBleActivity.this, "密码格式不对", Toast.LENGTH_SHORT).show(); | |||||
} | } | ||||
} | } | ||||
case R.id.disconnect: | case R.id.disconnect: | ||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().disconnectWifi()); | bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().disconnectWifi()); | ||||
break; | break; | ||||
// case R.id.ota: | |||||
//// bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().ota()); | |||||
//// OtaUtil otaUtil=new OtaUtil(this,mBluetoothService.getBleDevice(mAddress)); | |||||
// showFileChooser(); | |||||
// break; | |||||
// case R.id.surroundings: | |||||
// if (isTest) { | |||||
// setIp(productIp); | |||||
// mList.add(0, "设置环境IP为生产环境"); | |||||
// | |||||
// } else { | |||||
// setIp(testIp); | |||||
// mList.add(0, "设置环境IP为测试环境"); | |||||
// | |||||
// | |||||
// } | |||||
// listAdapter.notifyDataSetChanged(); | |||||
// | |||||
// break; | |||||
} | |||||
} | |||||
private void setIp(byte[] ips) { | |||||
if (ips.length <= 14) | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentIp(0, ips)); | |||||
else { | |||||
boolean isend = false; | |||||
int i = 0; | |||||
byte[] byte1 = ips; | |||||
while (!isend) { | |||||
if (byte1.length > 14) { | |||||
byte[] bytes = new byte[14]; | |||||
System.arraycopy(ips, i, bytes, 0, bytes.length); | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentIp(1, bytes)); | |||||
i = i + 14; | |||||
byte1 = Arrays.copyOf(ips, ips.length - i); | |||||
} else { | |||||
isend = true; | |||||
byte[] bytes = new byte[ips.length - i]; | |||||
System.arraycopy(ips, i, bytes, 0, bytes.length); | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentIp(0, bytes)); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
private void setIpUrl(byte[] setIpUrl) { | |||||
if (setIpUrl.length <= 14) | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentUrl(0, setIpUrl)); | |||||
else { | |||||
boolean isend = false; | |||||
int i = 0; | |||||
byte[] byte1 = setIpUrl; | |||||
while (!isend) { | |||||
if (byte1.length > 14) { | |||||
byte[] bytes = new byte[14]; | |||||
System.arraycopy(setIpUrl, i, bytes, 0, bytes.length); | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentUrl(1, bytes)); | |||||
i = i + 14; | |||||
byte1 = Arrays.copyOf(setIpUrl, setIpUrl.length - i); | |||||
} else { | |||||
isend = true; | |||||
byte[] bytes = new byte[setIpUrl.length - i]; | |||||
System.arraycopy(setIpUrl, i, bytes, 0, bytes.length); | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentUrl(0, bytes)); | |||||
} | |||||
} | |||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
@Override | |||||
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { | |||||
super.onActivityResult(requestCode, resultCode, data); | |||||
if (resultCode == RESULT_OK) { | |||||
Uri uri = data.getData(); | |||||
String path = uri.getPath(); | |||||
mList.add(0, "ota准备就绪,请勿操作"); | |||||
listAdapter.notifyDataSetChanged(); | |||||
bodyFatBleUtilsData.initOtaUtil(this, uri, new OnBleOTAListener() { | |||||
@Override | |||||
public void onOtaSuccess() { | |||||
mList.add(0, "ota成功"); | |||||
listAdapter.notifyDataSetChanged(); | |||||
} | |||||
@Override | |||||
public void onOtaFailure(int cmd, String err) { | |||||
mList.add(0, "失败"); | |||||
listAdapter.notifyDataSetChanged(); | |||||
} | |||||
@Override | |||||
public void onOtaProgress(float progress, int currentCount, int maxCount) { | |||||
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("*/*"); | |||||
intent.addCategory(Intent.CATEGORY_OPENABLE); | |||||
try { | |||||
startActivityForResult(Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE); | |||||
} catch (android.content.ActivityNotFoundException ex) { | |||||
Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); | |||||
} | |||||
} | |||||
} | } |
public final static int SMART_MASK =0x0022; | public final static int SMART_MASK =0x0022; | ||||
/** | |||||
* 百丽达 | |||||
*/ | |||||
public final static int BLD_WEIGHT =10086; | |||||
/** | |||||
* 蓝牙血氧仪 | |||||
*/ | |||||
public final static int BLE_BOOLD_OXYGEN =0x21; | |||||
/** | |||||
* 咖啡秤 | |||||
*/ | |||||
public final static int COFFEE_SCALE = 0x24; | |||||
/** | |||||
* 电滑板车 | |||||
*/ | |||||
public final static int SMART_SCOOTER =0x0025; | |||||
/** | |||||
* 共享充电器 | |||||
*/ | |||||
public final static int SHARE_CHARGER = 0x1003; | |||||
/** | |||||
* 共享充电器 | |||||
*/ | |||||
public final static int SHARE_SOCKET = 0x1005; | |||||
/** | |||||
* 共享套套机 | |||||
*/ | |||||
public final static int SHARE_CONDOM = 0x1007; | |||||
/** | |||||
* 身高体脂秤 | |||||
*/ | |||||
public final static int HEIGHT_BODY_FAT = 0x0026; | |||||
/** | |||||
* 寻物器,暂定,待修改 | |||||
*/ | |||||
public final static int FIND_DEVICE = -5; | |||||
/** | |||||
* 食品温度计 | |||||
*/ | |||||
public final static int FOOD_TEMP = 0x002b; | |||||
public final static int TEMP_Humidity = 0x002e; | |||||
/** | |||||
* 验证不握手不加密的id | |||||
*/ | |||||
public final static int CLEAR_SHAKE_HANDS = -6; | |||||
} | } |