瀏覽代碼

Update demo

master
陈福行 4 年之前
父節點
當前提交
840903369a

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

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'

+ 2
- 2
app/src/main/AndroidManifest.xml 查看文件

<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"/>

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

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()) {

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

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

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

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


} }
} }

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

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;

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

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) {



app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WeightScaleBle.java → app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WeightScaleBleActivity.java 查看文件

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) {

app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WeightScaleWifiBle.java → app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WeightScaleWifiBleActivity.java 查看文件

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


} }

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

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;


} }

Loading…
取消
儲存