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