@@ -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' | |||
} |
@@ -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" | |||
/> |
@@ -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) { | |||
} | |||
} |
@@ -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; |
@@ -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); |
@@ -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); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} |
@@ -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; |
@@ -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; | |||
} |
@@ -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 |
@@ -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> |