| 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.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' | |||||
| } | } | 
| <activity android:name=".TpmsConnectCmdActivity" /> | <activity android:name=".TpmsConnectCmdActivity" /> | ||||
| <activity android:name=".BloodGlucoseActivity" /> | <activity android:name=".BloodGlucoseActivity" /> | ||||
| <activity android:name=".ADWeightScaleCmdActivity"/> | <activity android:name=".ADWeightScaleCmdActivity"/> | ||||
| <activity android:name=".EightBodyfatActivity"/> | |||||
| <activity android:name=".ToothBrushWifiBleActivity"/> | |||||
| <activity android:name=".ADWeightScaleUserActivity" | <activity android:name=".ADWeightScaleUserActivity" | ||||
| android:theme="@style/Theme.AppCompat.Light.NoActionBar" | android:theme="@style/Theme.AppCompat.Light.NoActionBar" | ||||
| /> | /> | 
| loglist.add(0, adc); | loglist.add(0, adc); | ||||
| break; | break; | ||||
| case EightBodyfatUtil.HEARTRATE: | |||||
| case EightBodyfatUtil.HEART_RATE: | |||||
| switch (typestate) { | switch (typestate) { | ||||
| case EightBodyfatUtil.HEARTRATE_MEASUREMENT: | |||||
| case EightBodyfatUtil.HEART_RATE_MEASUREMENT: | |||||
| //心率测量完成 | //心率测量完成 | ||||
| loglist.add(0, "心率测量中"); | loglist.add(0, "心率测量中"); | ||||
| break; | break; | ||||
| case EightBodyfatUtil.HEARTRATE_SUCCESS: | |||||
| case EightBodyfatUtil.HEART_RATE_SUCCESS: | |||||
| loglist.add(0, "心率测量成功"); | loglist.add(0, "心率测量成功"); | ||||
| //心率测量成功 | //心率测量成功 | ||||
| break; | break; | ||||
| case EightBodyfatUtil.HEARTRATE_FAILED: | |||||
| case EightBodyfatUtil.HEART_RATE_FAILED: | |||||
| loglist.add(0, "心率测量失败"); | loglist.add(0, "心率测量失败"); | ||||
| //心率测量失败 | //心率测量失败 | ||||
| break; | break; | ||||
| case EightBodyfatUtil.TEMP_MEASUREMENT: | case EightBodyfatUtil.TEMP_MEASUREMENT: | ||||
| loglist.add(0, "测量温度"); | loglist.add(0, "测量温度"); | ||||
| break; | break; | ||||
| case EightBodyfatUtil.MEASUREMENTED: | |||||
| case EightBodyfatUtil.MEASUREMENT_END: | |||||
| loglist.add(0, "测量完成"); | loglist.add(0, "测量完成"); | ||||
| //测量完成 | //测量完成 | ||||
| break; | break; | ||||
| case EightBodyfatUtil.MUCCALLBACK_RESULT: | |||||
| case EightBodyfatUtil.MUC_CALL_BACK_RESULT: | |||||
| switch (typestate) { | switch (typestate) { | ||||
| case EightBodyfatUtil.APPCMD_CALIIBRATION: | |||||
| case EightBodyfatUtil.APP_CMD_CALIBRATION: | |||||
| //校验 | //校验 | ||||
| if (result == EightBodyfatUtil.SUCCESS) { | if (result == EightBodyfatUtil.SUCCESS) { | ||||
| loglist.add(0, "校验成功"); | loglist.add(0, "校验成功"); | ||||
| loglist.add(0, "校验中"); | loglist.add(0, "校验中"); | ||||
| } | } | ||||
| break; | break; | ||||
| case EightBodyfatUtil.APPCMD_TEMP_UNIT: | |||||
| case EightBodyfatUtil.APP_CMD_TEMP_UNIT: | |||||
| if (result == EightBodyfatUtil.SUCCESS) { | if (result == EightBodyfatUtil.SUCCESS) { | ||||
| loglist.add(0, "切换温度成功"); | loglist.add(0, "切换温度成功"); | ||||
| } else if (result == EightBodyfatUtil.FAILED) { | } else if (result == EightBodyfatUtil.FAILED) { | ||||
| } | } | ||||
| //切换温度 | //切换温度 | ||||
| break; | break; | ||||
| case EightBodyfatUtil.APPCMD_WEIGHT_UNIT: | |||||
| case EightBodyfatUtil.APP_CMD_WEIGHT_UNIT: | |||||
| if (result == EightBodyfatUtil.SUCCESS) { | if (result == EightBodyfatUtil.SUCCESS) { | ||||
| loglist.add(0, "切换体重单位成功"); | loglist.add(0, "切换体重单位成功"); | ||||
| } else if (result == EightBodyfatUtil.FAILED) { | } else if (result == EightBodyfatUtil.FAILED) { | ||||
| } | } | ||||
| @Override | @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); | loglist.add(0, "阻抗:" + adc + " 部位: " + part + " 算法" + arithmetic); | ||||
| } | } | ||||
| @Override | @Override | ||||
| public void onHeartRate(int heartrate) { | public void onHeartRate(int heartrate) { | ||||
| loglist.add(0, " 心率" + heartrate); | loglist.add(0, " 心率" + heartrate); | ||||
| } | } | ||||
| @Override | @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); | loglist.add(0, " 温度 正负" + sign + " 温度:" + temp + " 单位: " + unit + " 小数位" + decimal); | ||||
| } | } | ||||
| @Override | @Override | ||||
| public void onVersion(String version) { | public void onVersion(String version) { | ||||
| loglist.add(0, "当前版本:" + version); | loglist.add(0, "当前版本:" + version); | ||||
| } | } | ||||
| @Override | @Override | ||||
| public void showdata(String data) { | |||||
| loglist.add(0, data); | |||||
| public void showData(String data) { | |||||
| } | } | ||||
| } | } | 
| import android.widget.TextView; | import android.widget.TextView; | ||||
| import com.pingwang.bluetoothlib.AILinkSDK; | 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 com.pingwang.bluetoothlib.utils.BleLog; | ||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||
| Button btn_height = findViewById(R.id.btn_height); | Button btn_height = findViewById(R.id.btn_height); | ||||
| Button btn_ble = findViewById(R.id.btn_ble); | Button btn_ble = findViewById(R.id.btn_ble); | ||||
| findViewById(R.id.btn_ad_weight).setOnClickListener(listener); | 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_bloodglucose).setOnClickListener(listener); | ||||
| findViewById(R.id.btn_tooth_brush_wifi_ble).setOnClickListener(listener); | |||||
| btn_shpy.setOnClickListener(listener); | btn_shpy.setOnClickListener(listener); | ||||
| btn_tempgun.setOnClickListener(listener); | btn_tempgun.setOnClickListener(listener); | ||||
| btn_temp.setOnClickListener(listener); | btn_temp.setOnClickListener(listener); | ||||
| case R.id.btn_bloodglucose: | case R.id.btn_bloodglucose: | ||||
| type = BleDeviceConfig.BLOOD_GLUCOSE; | type = BleDeviceConfig.BLOOD_GLUCOSE; | ||||
| break; | 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: | case R.id.btn_ble: | ||||
| type = 0; | type = 0; | ||||
| break; | break; | 
| import com.pingwang.bluetoothlib.bean.BleValueBean; | import com.pingwang.bluetoothlib.bean.BleValueBean; | ||||
| import com.pingwang.bluetoothlib.config.BleConfig; | 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.CallbackDisIm; | ||||
| import com.pingwang.bluetoothlib.listener.OnCallbackBle; | import com.pingwang.bluetoothlib.listener.OnCallbackBle; | ||||
| import com.pingwang.bluetoothlib.listener.OnScanFilterListener; | import com.pingwang.bluetoothlib.listener.OnScanFilterListener; | ||||
| public void onItemClick(AdapterView<?> parent, View view, int position, long id) { | public void onItemClick(AdapterView<?> parent, View view, int position, long id) { | ||||
| String itemStr = mList.get(position); | String itemStr = mList.get(position); | ||||
| String mac = itemStr.split("=")[0]; | 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(); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| }); | }); | ||||
| break; | break; | ||||
| case BleDeviceConfig.BLOOD_GLUCOSE: | case BleDeviceConfig.BLOOD_GLUCOSE: | ||||
| intent.setClass(ShowBleActivity.this,BloodGlucoseActivity.class); | intent.setClass(ShowBleActivity.this,BloodGlucoseActivity.class); | ||||
| case BleDeviceConfig.EIGHT_BODY_FAT_SCALE: | |||||
| intent.setClass(ShowBleActivity.this,EightBodyfatActivity.class); | |||||
| break; | break; | ||||
| case 0: | case 0: | ||||
| intent.setClass(ShowBleActivity.this, BleCmdActivityDataData.class); | intent.setClass(ShowBleActivity.this, BleCmdActivityDataData.class); | 
| 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); | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | |||||
| } | 
| import android.widget.Toast; | import android.widget.Toast; | ||||
| import com.pingwang.bluetoothlib.bean.BleValueBean; | 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.device.BleDevice; | ||||
| import com.pingwang.bluetoothlib.listener.OnCallbackBle; | import com.pingwang.bluetoothlib.listener.OnCallbackBle; | ||||
| import com.pingwang.bluetoothlib.utils.BleLog; | import com.pingwang.bluetoothlib.utils.BleLog; | 
| 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; | |||||
| } | 
| android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
| android:text="艾迪体脂秤" | android:text="艾迪体脂秤" | ||||
| /> | /> | ||||
| <Button | |||||
| android:id="@+id/btn_eight_body_fat" | |||||
| android:layout_width="wrap_content" | |||||
| android:layout_height="wrap_content" | |||||
| android:text="八电极体脂秤" | |||||
| /> | |||||
| </LinearLayout> | </LinearLayout> | ||||
| <LinearLayout | <LinearLayout | ||||
| android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
| android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
| android:text="血糖仪" | 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> | ||||
| <LinearLayout | <LinearLayout | 
| <?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> |