Bläddra i källkod

1 增加八电极秤,牙刷(WIFI+BIE)

master
ace 4 år sedan
förälder
incheckning
88f784b962

+ 2
- 2
app/build.gradle Visa fil

@@ -31,6 +31,6 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.4.5'
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.3.0'
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.5.1'
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.5.2'
}

+ 2
- 0
app/src/main/AndroidManifest.xml Visa fil

@@ -38,6 +38,8 @@
<activity android:name=".TpmsConnectCmdActivity" />
<activity android:name=".BloodGlucoseActivity" />
<activity android:name=".ADWeightScaleCmdActivity"/>
<activity android:name=".EightBodyfatActivity"/>
<activity android:name=".ToothBrushWifiBleActivity"/>
<activity android:name=".ADWeightScaleUserActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
/>

+ 19
- 13
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/EightBodyfatActivity.java Visa fil

@@ -207,17 +207,17 @@ public class EightBodyfatActivity extends BleBaseActivity implements View.OnClic

loglist.add(0, adc);
break;
case EightBodyfatUtil.HEARTRATE:
case EightBodyfatUtil.HEART_RATE:
switch (typestate) {
case EightBodyfatUtil.HEARTRATE_MEASUREMENT:
case EightBodyfatUtil.HEART_RATE_MEASUREMENT:
//心率测量完成
loglist.add(0, "心率测量中");
break;
case EightBodyfatUtil.HEARTRATE_SUCCESS:
case EightBodyfatUtil.HEART_RATE_SUCCESS:
loglist.add(0, "心率测量成功");
//心率测量成功
break;
case EightBodyfatUtil.HEARTRATE_FAILED:
case EightBodyfatUtil.HEART_RATE_FAILED:
loglist.add(0, "心率测量失败");
//心率测量失败
break;
@@ -226,13 +226,13 @@ public class EightBodyfatActivity extends BleBaseActivity implements View.OnClic
case EightBodyfatUtil.TEMP_MEASUREMENT:
loglist.add(0, "测量温度");
break;
case EightBodyfatUtil.MEASUREMENTED:
case EightBodyfatUtil.MEASUREMENT_END:
loglist.add(0, "测量完成");
//测量完成
break;
case EightBodyfatUtil.MUCCALLBACK_RESULT:
case EightBodyfatUtil.MUC_CALL_BACK_RESULT:
switch (typestate) {
case EightBodyfatUtil.APPCMD_CALIIBRATION:
case EightBodyfatUtil.APP_CMD_CALIBRATION:
//校验
if (result == EightBodyfatUtil.SUCCESS) {
loglist.add(0, "校验成功");
@@ -242,7 +242,7 @@ public class EightBodyfatActivity extends BleBaseActivity implements View.OnClic
loglist.add(0, "校验中");
}
break;
case EightBodyfatUtil.APPCMD_TEMP_UNIT:
case EightBodyfatUtil.APP_CMD_TEMP_UNIT:
if (result == EightBodyfatUtil.SUCCESS) {
loglist.add(0, "切换温度成功");
} else if (result == EightBodyfatUtil.FAILED) {
@@ -252,7 +252,7 @@ public class EightBodyfatActivity extends BleBaseActivity implements View.OnClic
}
//切换温度
break;
case EightBodyfatUtil.APPCMD_WEIGHT_UNIT:
case EightBodyfatUtil.APP_CMD_WEIGHT_UNIT:
if (result == EightBodyfatUtil.SUCCESS) {
loglist.add(0, "切换体重单位成功");
} else if (result == EightBodyfatUtil.FAILED) {
@@ -283,20 +283,24 @@ public class EightBodyfatActivity extends BleBaseActivity implements View.OnClic
}

@Override
public void onimpedance(int adc, int part, int arithmetic) {
public void onImpedance(int adc, int part, int arithmetic) {
loglist.add(0, "阻抗:" + adc + " 部位: " + part + " 算法" + arithmetic);
}



@Override
public void onHeartRate(int heartrate) {
loglist.add(0, " 心率" + heartrate);
}

@Override
public void onTEMP(int sign, float temp, int unit, int decimal) {
public void onTemp(int sign, float temp, int unit, int decimal) {
loglist.add(0, " 温度 正负" + sign + " 温度:" + temp + " 单位: " + unit + " 小数位" + decimal);
}



@Override
public void onVersion(String version) {
loglist.add(0, "当前版本:" + version);
@@ -313,7 +317,9 @@ public class EightBodyfatActivity extends BleBaseActivity implements View.OnClic
}

@Override
public void showdata(String data) {
loglist.add(0, data);
public void showData(String data) {
}


}

+ 9
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/MainActivity.java Visa fil

@@ -14,7 +14,7 @@ import android.widget.Button;
import android.widget.TextView;

import com.pingwang.bluetoothlib.AILinkSDK;
import com.pingwang.bluetoothlib.config.BleDeviceConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig;
import com.pingwang.bluetoothlib.utils.BleLog;

import androidx.annotation.NonNull;
@@ -47,7 +47,9 @@ public class MainActivity extends AppCompatActivity {
Button btn_height = findViewById(R.id.btn_height);
Button btn_ble = findViewById(R.id.btn_ble);
findViewById(R.id.btn_ad_weight).setOnClickListener(listener);
findViewById(R.id.btn_eight_body_fat).setOnClickListener(listener);
findViewById(R.id.btn_bloodglucose).setOnClickListener(listener);
findViewById(R.id.btn_tooth_brush_wifi_ble).setOnClickListener(listener);
btn_shpy.setOnClickListener(listener);
btn_tempgun.setOnClickListener(listener);
btn_temp.setOnClickListener(listener);
@@ -93,6 +95,12 @@ public class MainActivity extends AppCompatActivity {
case R.id.btn_bloodglucose:
type = BleDeviceConfig.BLOOD_GLUCOSE;
break;
case R.id.btn_eight_body_fat:
type = BleDeviceConfig.EIGHT_BODY_FAT_SCALE;
break;
case R.id.btn_tooth_brush_wifi_ble:
type=BleDeviceConfig.TOOTHBRUSH_WIFI_BLE;
break;
case R.id.btn_ble:
type = 0;
break;

+ 17
- 5
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ShowBleActivity.java Visa fil

@@ -18,7 +18,7 @@ import android.widget.Toast;

import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.config.BleConfig;
import com.pingwang.bluetoothlib.config.BleDeviceConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig;
import com.pingwang.bluetoothlib.listener.CallbackDisIm;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.listener.OnScanFilterListener;
@@ -153,10 +153,20 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle,
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String itemStr = mList.get(position);
String mac = itemStr.split("=")[0];
if (mBluetoothService != null) {
mBluetoothService.stopScan();
mBluetoothService.connectDevice(mac);
showLoading();
if (BleDeviceConfig.TOOTHBRUSH_WIFI_BLE==mType){
Intent intent=new Intent();
intent.setClass(ShowBleActivity.this, ToothBrushWifiBleActivity.class);
intent.putExtra("type", mType);
intent.putExtra("mac", mac);
startActivity(intent);
finish();

}else {
if (mBluetoothService != null) {
mBluetoothService.stopScan();
mBluetoothService.connectDevice(mac);
showLoading();
}
}
}
});
@@ -282,6 +292,8 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle,
break;
case BleDeviceConfig.BLOOD_GLUCOSE:
intent.setClass(ShowBleActivity.this,BloodGlucoseActivity.class);
case BleDeviceConfig.EIGHT_BODY_FAT_SCALE:
intent.setClass(ShowBleActivity.this,EightBodyfatActivity.class);
break;
case 0:
intent.setClass(ShowBleActivity.this, BleCmdActivityDataData.class);

+ 523
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ToothBrushWifiBleActivity.java Visa fil

@@ -0,0 +1,523 @@
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.EditText;
import android.widget.ListView;
import android.widget.Toast;

import androidx.annotation.Nullable;

import com.pingwang.bluetoothlib.BleBaseActivity;
import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.config.CmdConfig;
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 java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import cn.net.aicare.modulelibrary.module.ToothBrush.ToothBrushBleCmd;
import cn.net.aicare.modulelibrary.module.ToothBrush.ToothBrushWiFiBleUtilsData;

public class ToothBrushWifiBleActivity extends BleBaseActivity implements View.OnClickListener, OnCallbackBle, ToothBrushWiFiBleUtilsData.BleToothBrushWiFiCallback, ToothBrushWiFiBleUtilsData.BleToothBrushCallback {
private String TAG = ToothBrushWifiBleActivity.class.getName();
private String mAddress;
private List<String> mList;
private ArrayAdapter listAdapter;

private ToothBrushWiFiBleUtilsData mToothBrushWiFiBleUtilsData;
private MHandler mMHandler;
private EditText mEditText, select_gears_et;
private String dataPaw;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tooth_brush_wifi_ble);
findViewById(R.id.wifistatus).setOnClickListener(this);
findViewById(R.id.sn).setOnClickListener(this);
findViewById(R.id.scan_wifi).setOnClickListener(this);
findViewById(R.id.connect_wifi).setOnClickListener(this);
findViewById(R.id.disconnect).setOnClickListener(this);
findViewById(R.id.setedname).setOnClickListener(this);
findViewById(R.id.support_unit).setOnClickListener(this);
findViewById(R.id.default_try_out).setOnClickListener(this);
findViewById(R.id.default_time_mode).setOnClickListener(this);
findViewById(R.id.default_mode).setOnClickListener(this);

mEditText = findViewById(R.id.select_wifi_et);
select_gears_et = findViewById(R.id.select_gears_et);

mAddress = getIntent().getStringExtra("mac");
mList = new ArrayList<>();
ListView listView = findViewById(R.id.log_list);
listAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mList);
listView.setAdapter(listAdapter);
WeakReference weakReference = new WeakReference(new MHandler());
mMHandler = (MHandler) weakReference.get();


}


@Override
public void onServiceSuccess() {

//与服务建立连接
mList.add(0, "服务与界面建立连接成功");
mList.add(0, "搜索设备");
mMHandler.sendEmptyMessage(ToRefreUi);
mBluetoothService.setOnCallback(this);
mBluetoothService.scanLeDevice(30 * 1000);


}


@Override
public void onServiceErr() {

}

@Override
public void unbindServices() {

}

@Override
public void onStartScan() {

}

@Override
public void onScanning(BleValueBean data) {
BleLog.i(TAG, "MAC=" + mAddress + "||CID=" + data.getCid() + "||VID=" + data.getVid() + "||PID=" + data.getPid());
if (data.getMac().equalsIgnoreCase(mAddress)) {
mBluetoothService.connectDevice(data.getMac());
}
}

@Override
public void onScanTimeOut() {

}

@Override
public void onConnecting(String mac) {

}

@Override
public void onDisConnected(String mac, int code) {
mList.add(0, "蓝牙已断开");
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onServicesDiscovered(String mac) {
mList.add(0, "蓝牙已连接");
mMHandler.sendEmptyMessage(ToRefreUi);
mBluetoothService.setOnCallback(this);
BleDevice bleDevice = mBluetoothService.getBleDevice(mAddress);
if (bleDevice != null) {
ToothBrushWiFiBleUtilsData.init(bleDevice, this, this);
mToothBrushWiFiBleUtilsData = ToothBrushWiFiBleUtilsData.getInstance();
mMHandler.sendEmptyMessageDelayed(ToRequestToken, 600);
mMHandler.sendEmptyMessageDelayed(GETBATTERY, 800);
}
}

@Override
public void bleOpen() {

}

@Override
public void bleClose() {

}


@Override
public void OnBleAndWifiStatus(int blestatus, int wifistatus, int workstatus) {
BleLog.e(TAG, "蓝牙状态:" + blestatus + " wifi状态:" + " 工作状态:" + workstatus);
mList.add(0, "蓝牙状态:" + blestatus + " wifi状态:" + wifistatus + " 工作状态:" + workstatus);
mMHandler.sendEmptyMessage(ToRefreUi);

}

@Override
public void OnWifiScanStatus(int Status) {
mList.add(0, "扫描wifi状态: " + Status);
mMHandler.sendEmptyMessage(ToRefreUi);
}

private HashMap<Integer, String> mHashMap = new HashMap();

@Override
public void OnWifiListName(int no, String name) {

mHashMap.put(no, name);
mMHandler.sendEmptyMessage(ToRefreUi);
}

private HashMap<Integer, String> wifimacMap = new HashMap();

@Override
public void OnWifiListInfo(int no, String mac, int db, int type, int wifistatus) {

wifimacMap.put(no, mac);
mList.add(0, "WIFI序号: " + no + " WIFI名称:" + mHashMap.get(no) + " WIFImac: " + mac + " db: " + db + " type: " + type + " wifistata" + wifistatus);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void OnWifiCurrentConnect(String name) {
mList.add(0, "当前连接wifi名称: " + name);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void OnWifiScanFinish(int wifiNum) {
mList.add(0, "扫描结束 扫描的wifi个数 " + wifiNum);
mMHandler.sendEmptyMessage(ToRefreUi);
}

private boolean issetMac = false;

/**
* @param type {@link CmdConfig#SET_WIFI_MAC}
* @param status {@link ToothBrushBleCmd#STATUS_SUCCESS}
*/
@Override
public void OnSetWifiNameOrPwdOrConnectCallback(int type, int status) {
if (type == CmdConfig.SET_WIFI_MAC) {
mList.add(0, "获取到设置的mac地址状态 " + status);
if (status == ToothBrushBleCmd.STATUS_SUCCESS) {
issetMac = true;
setPaw(dataPaw);
}

}
if (type == CmdConfig.SET_WIFI_PWD) {
mList.add(0, "获取到设置的密码状态 " + status);

if (status == ToothBrushBleCmd.STATUS_SUCCESS && issetMac) {
mMHandler.sendEmptyMessage(ConnectWifi);
}
}
if (type == CmdConfig.DISORCONNECTWIFI) {
mList.add(0, "发起连接 " + status);
mMHandler.sendEmptyMessage(ToRefreUi);
}

}

@Override
public void getSelectWifiMac(String mac) {
mList.add(0, "获取到设置的wifi的mac地址 " + mac);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void getSelectWifiPaw(String paw) {
mList.add(0, "获取到设置的wifi的密码 " + paw);
mMHandler.sendEmptyMessage(ToRefreUi);
}


@Override
public void getDid(long sn) {
mList.add(0, "sn: " + sn);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onClick(View v) {
int id = v.getId();
if (mToothBrushWiFiBleUtilsData != null)
switch (id) {
case R.id.wifistatus:

mToothBrushWiFiBleUtilsData.queryBleStatus();
break;
case R.id.sn:
mToothBrushWiFiBleUtilsData.getDevicedid();
break;
case R.id.scan_wifi:
mToothBrushWiFiBleUtilsData.scanWifi();
break;
case R.id.connect_wifi:
try {
int selectWifi = Integer.valueOf(mEditText.getText().toString().trim());
if (mHashMap.get(selectWifi) != null && wifimacMap.get(selectWifi) != null) {
WifiDialog.newInstance().setTitle(mHashMap.get(selectWifi), wifimacMap.get(selectWifi)).setOnDialogListener(new WifiDialog.OnDialogListener() {
@Override
public void tvCancelListener(View v) {

}

@Override
public void tvSucceedListener(View v, String data) {

if (data.equals("") || data.length() > 8) {
dataPaw = data.trim();
mToothBrushWiFiBleUtilsData.setWifimac(wifimacMap.get(selectWifi));
} else {
Toast.makeText(ToothBrushWifiBleActivity.this, "密码格式不对", Toast.LENGTH_SHORT).show();
}
}

@Override
public void etModifyName(EditText v) {

}
}).show(getSupportFragmentManager());
}
} catch (NumberFormatException e) {
e.printStackTrace();
mMHandler.sendEmptyMessage(ConnectWifi);
}

break;

case R.id.setedname:
mToothBrushWiFiBleUtilsData.getConnectWifiName();
break;
case R.id.disconnect:
mToothBrushWiFiBleUtilsData.disconnectWifi();
break;
case R.id.support_unit:
mToothBrushWiFiBleUtilsData.getSupportGears();
break;
case R.id.default_mode:
String gear = select_gears_et.getText().toString().trim();
if (!gear.isEmpty()) {
String[] gears = null;
if (gear.contains(",")) {
gears = gear.split(",");
} else if (gear.contains(",")) {
gears = gear.split(",");
} else {
Toast.makeText(this, "请输入时长,档位,档位级别(数字加符号)", Toast.LENGTH_SHORT).show();
}
if (gears != null) {
try {
mToothBrushWiFiBleUtilsData.setDefault(Integer.parseInt(gears[0]), Integer.parseInt(gears[1]), Integer.parseInt(gears[2]));
} catch (NumberFormatException e) {
e.printStackTrace();
Toast.makeText(this, "请输入时长,档位,档位级别(数字加符号)", Toast.LENGTH_SHORT).show();
}

}
}
break;
case R.id.default_try_out:
String gear1 = select_gears_et.getText().toString().trim();
if (!gear1.isEmpty()) {
String[] gears = null;
if (gear1.contains(",")) {
gears = gear1.split(",");
} else if (gear1.contains(",")) {
gears = gear1.split(",");
} else {
Toast.makeText(this, "请输入时长,档位,档位级别(数字加符号)", Toast.LENGTH_SHORT).show();
}
if (gears != null) {
try {
mToothBrushWiFiBleUtilsData.setTryOut(Integer.parseInt(gears[1]), Integer.parseInt(gears[2]),0,0);
} catch (NumberFormatException e) {
e.printStackTrace();
Toast.makeText(this, "请输入时长,档位,档位级别(数字加符号)", Toast.LENGTH_SHORT).show();
}

}
}

break;
case R.id.default_time_mode:

mToothBrushWiFiBleUtilsData.getdefaultGearAndDuration();
break;
}

}

private final int ToRefreUi = 300;
private final int ConnectWifi = 400;
private final int ToRequestToken = 500;
private final int GETBATTERY = 600;


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

@Override
public void onGetSupportGears(List<Integer> staif, List<Integer> secondLevel) {
mList.add(0, "牙刷支持的一级档位:" + Arrays.toString(staif.toArray()) + " 二级档位:" + Arrays.toString(secondLevel.toArray()));
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onGetBattery(int batteryStatus, int batteryQuantity) {
mList.add(0, "电池状态:" + batteryStatus + " 电量:" + batteryQuantity);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onGetDefaultGearAndDuration(int time, int gear, int gearFrom) {
mList.add(0, "获得到默认的刷牙档位和时长:" + time + " 档位:" + gear + " 档位级别" + gearFrom);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onGetTokenResult(int result) {
String s = "";
if (result == ToothBrushBleCmd.NO_TOKEN) {
s = "没有";
} else if (result == ToothBrushBleCmd.HAS_TOKEN) {
s = "已经授权";
} else if (result == ToothBrushBleCmd.WITHOUT_TOKEN) {
s = "不需要授权";
} else if (result == ToothBrushBleCmd.SUCCESSTOKEN) {
s = "授权成功";
}
mList.add(0, "请求授权结果" + result + " " + s);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onGetManualParameter(int time, int hz, int duty) {
mList.add(0, " 获取手动档位的参数: 时长" + time + " 频率" + hz + " 占空比" + duty);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onSetDefaultModeAndManualModeResult(byte type, int result) {
String s = "";
if (result == 0) {
s = "设置成功";
} else if (result == 1) {
s = "设置失败";
} else if (result == 2) {
s = "不支持设置";
}
if (type == ToothBrushBleCmd.SET_TOOTHBRUSH_TIME_GEARS) {
mList.add(0, " 设置默认刷牙时长和工作档位: 结果" + result + " " + s);
mMHandler.sendEmptyMessage(ToRefreUi);
} else {
mList.add(0, " 设置手动设置(自定义)档位: 结果" + result + " " + s);
mMHandler.sendEmptyMessage(ToRefreUi);
}
}

@Override
public void onTestFinish(int totalTime, int leftTime, int rightTime, int mode, int battery) {
mList.add(0, "刷牙完成: 总时长:" + totalTime + " 左时长:" + leftTime + " 右时长:" + rightTime + " 模式:" + mode + " 电量:" + battery);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onTryOutResult(int result) {
mList.add(0, "设置使用结果:" + result + " ( 0:设置成功 1:设置失败,原因未知 2:不支持设置)");
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onTwoLevelModeDefault(int mode) {
mList.add(0, "获取二级档位默认值:" + mode);
mMHandler.sendEmptyMessage(ToRefreUi);
}

@Override
public void onShowData(String data) {

}

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 ConnectWifi:
mToothBrushWiFiBleUtilsData.connectWifi();
break;
case ToRequestToken:
mList.add(0, "请求授权");
mToothBrushWiFiBleUtilsData.requestToken(System.currentTimeMillis());
if (listAdapter != null) {
listAdapter.notifyDataSetChanged();
}
break;
case GETBATTERY:
mToothBrushWiFiBleUtilsData.getBattery();
break;
}
}
}


/**
* wifi密码一次只能传14个byte
* 如果密码长度超过14个byte 就需要分包传送
* subpackage 为0 时,表示后面还有数据
* subpackage 为1 时,表示数据小于或等于14个byte,后面没有数据
*
* @param paw
*/
private void setPaw(String paw) {
if (paw.isEmpty()) {
byte[] bytes = new byte[0];
mToothBrushWiFiBleUtilsData.setWifiPwd(0, bytes);
} else {
byte[] password = BleStrUtils.stringToBytes(paw);
if (password != null) {
if (password.length < 14)
mToothBrushWiFiBleUtilsData.setWifiPwd(0, password);

else {
boolean isend = false;
int i = 0;
byte[] byte1 = password;
while (!isend) {
if (byte1.length > 14) {
byte[] bytes = new byte[14];
System.arraycopy(password, i, bytes, 0, bytes.length);

mToothBrushWiFiBleUtilsData.setWifiPwd(1, bytes);
i = i + 14;
byte1 = Arrays.copyOf(password, password.length - i);
} else {
isend = true;
byte[] bytes = new byte[password.length - i];
System.arraycopy(password, i, bytes, 0, bytes.length);
mToothBrushWiFiBleUtilsData.setWifiPwd(1, bytes);

}

}


}
}
}
}

}

+ 1
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/WeightScaleWifiBle.java Visa fil

@@ -13,7 +13,7 @@ import android.widget.RadioButton;
import android.widget.Toast;

import com.pingwang.bluetoothlib.bean.BleValueBean;
import com.pingwang.bluetoothlib.config.BleDeviceConfig;
import aicare.net.cn.sdk.ailinksdkdemoandroid.config.BleDeviceConfig;
import com.pingwang.bluetoothlib.device.BleDevice;
import com.pingwang.bluetoothlib.listener.OnCallbackBle;
import com.pingwang.bluetoothlib.utils.BleLog;

+ 127
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/config/BleDeviceConfig.java Visa fil

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

/**
* xing<br>
* 2019/3/5<br>
* 设备相关信息配置
*/
public class BleDeviceConfig {


//--------------------设备类型-----------------------


/**
* 血压计(sphygmomanometer)
*
*/
public final static int BLOOD_PRESSURE =0x01;
/**
* 额温枪(Forehead gun)
*/
public final static int INFRARED_THERMOMETER =0x02;
/**
* 体温计(thermometer)
*/
public final static int THERMOMETER =0x03;
/**
* 婴儿秤(Baby scale)
*/
public final static int BABY_SCALE =0x04;
/**
* 身高仪(Height gauge)
*/
public final static int HEIGHT_METER =0x05;

/**
* 智能门锁(Smart door lock)
*/
public final static int SMART_LOCK =0x0B;

/**
* 定制版遥控器(Customized remote control)
*/
public final static int EL_REMOTE_CONTROL =0x0C;

/**
* 连接类型的TPMS(Connection type TPMS)
*/
public final static int TPMS_CONN_DEVICE =0x0D;

/**
* 体重体脂称(Body fat scale)
*/
public final static int WEIGHT_BODY_FAT_SCALE =0x0E;

/**
* 箱包锁(Luggage lock)
*/
public final static int LUGGAGE_LOCK =0x0F;
/**
* 锁遥控器(Lock the remote control)
*/
public final static int LOCK_REMOTE_CONTROL =0x10;

/**
* wifi+ble体脂秤(wifi + ble body fat scale)
*/
public final static int WEIGHT_BODY_FAT_SCALE_WIFI_BLE=0x11;
/**
* wifi+ble牙刷(wifi + ble body fat scale)
*/
public final static int TOOTHBRUSH_WIFI_BLE=0x12;

/**
* 八电极体脂秤
*/
public final static int EIGHT_BODY_FAT_SCALE =0x13;

/**
* 风速计
* cid 为0x14
*/
public final static int ANEMOMETER=0x14;

/**
* 钳表
* cid 为0x15
*/
public final static int CLAMP_TABLE=0x15;

/**
* 体重体脂称(Body fat scale)艾迪
*/
public final static int WEIGHT_BODY_FAT_SCALE_AD =0x100E;

/**
* 婴儿体脂两用秤
*/
public final static int BABY_BODY_FAT =0x1A;

/**
* 血糖仪
*/
public final static int BLOOD_GLUCOSE=0x1c;


/**
* 运动手表 华盛达手表
*/
public final static int SPORTS_WATCH_BLE = 0x1D;


/**
* 广播秤
*/
public final static int BROADCAST_SCALE =0x10001;


/**
* 智能口罩
*/
public final static int SMART_MASK =0x0022;




}

+ 12
- 1
app/src/main/res/layout/activity_main.xml Visa fil

@@ -72,7 +72,12 @@
android:layout_height="wrap_content"
android:text="艾迪体脂秤"
/>

<Button
android:id="@+id/btn_eight_body_fat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="八电极体脂秤"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
@@ -90,6 +95,12 @@
android:layout_height="wrap_content"
android:text="血糖仪"
/>
<Button
android:id="@+id/btn_tooth_brush_wifi_ble"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="牙刷(ble+WiFi)"
/>
</LinearLayout>

<LinearLayout

+ 121
- 0
app/src/main/res/layout/activity_tooth_brush_wifi_ble.xml Visa fil

@@ -0,0 +1,121 @@
<?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="查看设备id" />

<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/default_try_out"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/sn"

android:layout_marginTop="5dp"
android:text="试用" />

<Button
android:id="@+id/default_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/sn"
android:layout_toEndOf="@id/default_try_out"
android:layout_marginStart="9dp"
android:layout_marginTop="5dp"
android:text="默认档位" />

<EditText
android:id="@+id/select_gears_et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/default_mode"
android:layout_toEndOf="@id/default_mode"
android:hint="时长(s),档位,档位级别"

android:textSize="14dp" />
<Button
android:id="@+id/setedname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/default_mode"
android:layout_marginTop="5dp"
android:text="获取wifi名称" />


<Button
android:id="@+id/support_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/setedname"
android:layout_below="@+id/default_mode"
android:layout_marginTop="5dp"
android:text="获取支持档位" />
<Button
android:id="@+id/default_time_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/support_unit"
android:layout_below="@+id/default_mode"
android:layout_marginTop="5dp"
android:text="获取时长和档位" />
<ListView
android:id="@+id/log_list"
android:layout_marginTop="10dp"
android:layout_below="@id/setedname"
android:layout_width="match_parent"
android:layout_height="match_parent">

</ListView>
</RelativeLayout>

Laddar…
Avbryt
Spara