@@ -6,8 +6,8 @@ android { | |||
applicationId "aicare.net.cn.sdk.ailinksdkdemoandroid" | |||
minSdkVersion 19 | |||
targetSdkVersion 31 | |||
versionCode 17 | |||
versionName "1.10.59" | |||
versionCode 18 | |||
versionName "1.10.60" | |||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | |||
} | |||
buildTypes { | |||
@@ -40,9 +40,9 @@ dependencies { | |||
implementation 'androidx.appcompat:appcompat:1.4.2' | |||
implementation 'androidx.constraintlayout:constraintlayout:2.0.4' | |||
testImplementation 'junit:junit:4.12' | |||
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.10.9'//蓝牙核心库 | |||
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.13.1'//蓝牙核心库 | |||
implementation 'com.github.elinkthings:AILinkSDKOtaLibraryAndroid:1.0.3'//OTA库,需要依赖核心库 | |||
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.8.0'//蓝牙解析库 | |||
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.8.3'//蓝牙解析库 | |||
implementation 'androidx.recyclerview:recyclerview:1.2.1' | |||
implementation 'com.jakewharton:butterknife:10.2.0' | |||
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' |
@@ -19,11 +19,9 @@ | |||
<!--兼容6.0以上的手机Ble--> | |||
<uses-permission-sdk-23 | |||
android:name="android.permission.ACCESS_COARSE_LOCATION"/> | |||
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" /> | |||
<uses-permission-sdk-23 | |||
android:name="android.permission.ACCESS_FINE_LOCATION"/> | |||
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" /> | |||
<uses-permission | |||
android:name="android.permission.BLUETOOTH" | |||
@@ -62,7 +60,8 @@ | |||
android:theme="@style/AppTheme" | |||
android:usesCleartextTraffic="true" | |||
tools:targetApi="q"> | |||
<activity android:name=".MainActivity" | |||
<activity | |||
android:name=".MainActivity" | |||
android:exported="true"> | |||
<intent-filter> | |||
<action android:name="android.intent.action.VIEW" /> | |||
@@ -129,6 +128,8 @@ | |||
<activity android:name=".PublicBleNetworkCmdActivity" /> | |||
<activity android:name=".modules.noise_meter.WifiBleNoiseMeterActivity" /> | |||
<activity android:name=".modules.noise_meter.BleNoiseMeterActivity" /> | |||
<activity android:name=".modules.meat_probe_charger.MeatProbeChargerActivity" /> | |||
<activity android:name=".modules.meat_probe.MeatProbeActivity" /> | |||
<activity | |||
android:name=".modules.weight_scale.WeightScaleActivity" | |||
@@ -147,7 +148,7 @@ | |||
android:name="android.support.FILE_PROVIDER_PATHS" | |||
android:resource="@xml/file_paths" /> | |||
</provider> | |||
<service android:name="com.pingwang.bluetoothlib.server.ELinkBleServer"/> | |||
<service android:name="com.pingwang.bluetoothlib.server.ELinkBleServer" /> | |||
</application> | |||
</manifest> |
@@ -12,6 +12,7 @@ import android.view.View; | |||
import android.widget.TextView; | |||
import com.besthealth.bhBodyComposition120.BhBodyComposition; | |||
import com.pingwang.bluetoothlib.AILinkBleManager; | |||
import com.pingwang.bluetoothlib.AILinkSDK; | |||
import com.pingwang.bluetoothlib.utils.BleLog; | |||
@@ -40,7 +41,6 @@ import androidx.core.content.ContextCompat; | |||
public class MainActivity extends AppCompatActivity { | |||
private static String TAG = MainActivity.class.getName(); | |||
private List<View> mList = new ArrayList<>(); | |||
private Context mContext; | |||
@@ -54,6 +54,23 @@ public class MainActivity extends AppCompatActivity { | |||
initView(); | |||
initData(); | |||
initListener(); | |||
int bodyComposition = new BhBodyComposition().getBodyComposition(); | |||
L.i("bodyComposition:" + bodyComposition); | |||
// Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:10086")); | |||
// Method setDefaultSim = null; | |||
// try { | |||
// setDefaultSim = TelephonyManager.class.getDeclaredMethod("setDefaultSim", Context.class, int.class, int.class); | |||
// setDefaultSim.invoke(null, this, 0, 0); | |||
// } catch (NoSuchMethodException e) { | |||
// e.printStackTrace(); | |||
// } catch (IllegalAccessException e) { | |||
// e.printStackTrace(); | |||
// } catch (InvocationTargetException e) { | |||
// e.printStackTrace(); | |||
// } | |||
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | |||
// startActivity(intent); | |||
} | |||
@@ -61,23 +78,59 @@ public class MainActivity extends AppCompatActivity { | |||
String version = getString(R.string.version) + ":" + BuildConfig.VERSION_NAME; | |||
((TextView) findViewById(R.id.tv_app_version)).setText(version); | |||
ActionBar supportActionBar = getSupportActionBar(); | |||
if (supportActionBar != null) { | |||
if (supportActionBar != null) | |||
supportActionBar.setTitle(getString(R.string.app_name) + BuildConfig.VERSION_NAME); | |||
} | |||
findViewById(R.id.btn_about).setOnClickListener(new View.OnClickListener() { | |||
@Override | |||
public void onClick(View v) { | |||
startActivity(new Intent(mContext, AboutActivity.class)); | |||
} | |||
}); | |||
findViewById(R.id.btn_about).setOnLongClickListener(new View.OnLongClickListener() { | |||
@Override | |||
public boolean onLongClick(View v) { | |||
// startActivity(new Intent(mContext, RopeSkipOtaActivity.class)); | |||
return true; | |||
} | |||
}); | |||
MyListener listener = new MyListener(); | |||
// Button btn_shpy = findViewById(R.id.btn_sphy); | |||
// Button btn_tempgun = findViewById(R.id.btn_tempgun); | |||
// Button btn_temp = findViewById(R.id.btn_temp); | |||
// Button btn_baby = findViewById(R.id.btn_baby); | |||
// Button btn_height = findViewById(R.id.btn_height); | |||
// Button btn_ble = findViewById(R.id.btn_ble); | |||
// Button btn_weightScale = findViewById(R.id.btn_lock); | |||
// Button btn_ble_test = findViewById(R.id.btn_ble_test); | |||
// Button btnConnectTest = findViewById(R.id.btnConnectTest); | |||
// Button btn_ad_weight = findViewById(R.id.btn_ad_weight); | |||
// Button btn_ble_weight = findViewById(R.id.btn_ble_weight); | |||
// Button btn_wifi_ble_tooth = findViewById(R.id.btn_wifi_ble_tooth); | |||
// Button wifi_config = findViewById(R.id.wifi_config); | |||
// Button eight_scale = findViewById(R.id.eight_scale); | |||
// Button btn_ota = findViewById(R.id.btn_ota); | |||
// Button btn_wristband = findViewById(R.id.btn_wristband); | |||
// Button glucometer = findViewById(R.id.glucometer); | |||
// Button btn_broadcast_scale = findViewById(R.id.btn_broadcast_scale); | |||
// Button btn_broadcast_blood_oxygen = findViewById(R.id.btn_broadcast_blood_oxygen); | |||
// Button btn_smart_mask = findViewById(R.id.btn_smart_mask); | |||
// Button btn_bld = findViewById(R.id.btn_bld); | |||
// Button btn_bleBo = findViewById(R.id.btn_bleBo); | |||
// Button btn_coffeeScale = findViewById(R.id.btn_coffeeScale); | |||
// Button btn_scooter = findViewById(R.id.btn_scooter); | |||
// Button btn_shareCharger = findViewById(R.id.btn_shareCharger); | |||
// Button btn_transmission = findViewById(R.id.btn_transmission); | |||
// Button btn_wifi_ble_weight = findViewById(R.id.btn_wifi_ble_weight); | |||
// Button btn_baby_body_fat = findViewById(R.id.btn_baby_body_fat); | |||
mList.add(findViewById(R.id.btn_sphy)); | |||
mList.add(findViewById(R.id.btn_tempgun)); | |||
mList.add(findViewById(R.id.btn_temp)); | |||
mList.add(findViewById(R.id.btn_baby)); | |||
mList.add(findViewById(R.id.btn_height)); | |||
mList.add(findViewById(R.id.btn_ble)); | |||
// mList.add(findViewById(R.id.btn_lock)); | |||
mList.add(findViewById(R.id.btn_ble_test)); | |||
mList.add(findViewById(R.id.btnConnectTest)); | |||
mList.add(findViewById(R.id.btn_ad_weight)); | |||
@@ -128,6 +181,8 @@ public class MainActivity extends AppCompatActivity { | |||
mList.add(findViewById(R.id.btn_meat_probe_charger)); | |||
mList.add(findViewById(R.id.btn_weight_scale)); | |||
mList.add(findViewById(R.id.btn_broadcast_scale_weight)); | |||
mList.add(findViewById(R.id.btn_meat_probe)); | |||
for (View view : mList) { | |||
view.setOnClickListener(listener); | |||
} | |||
@@ -145,6 +200,28 @@ public class MainActivity extends AppCompatActivity { | |||
public void onClick(View v) { | |||
startActivity(new Intent(mContext, RopeSkippingSetActivity.class)); | |||
// Intent intent = new Intent(); | |||
// intent.setAction("android.media.action.STILL_IMAGE_CAMERA"); | |||
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); | |||
// startActivity(intent); | |||
// | |||
// mHandler.postDelayed(new Runnable() { | |||
// @Override | |||
// public void run() { | |||
// try { | |||
// L.i("按下音量+ start"); | |||
// String keyCommand = "input keyevent " + KeyEvent.KEYCODE_VOLUME_UP; | |||
// Runtime runtime = Runtime.getRuntime(); | |||
// Process proc = runtime.exec(keyCommand); | |||
// L.i("按下音量+ stop"+proc.toString()); | |||
// } catch (IOException e) { | |||
// e.printStackTrace(); | |||
// } | |||
// | |||
// } | |||
// }, 5000); | |||
} | |||
}); | |||
@@ -183,22 +260,21 @@ public class MainActivity extends AppCompatActivity { | |||
} | |||
protected void initView() { | |||
BleLog.init("", "", true); | |||
BleLog.init(true); | |||
//connectDevice(BleValueBean bleValueBean);连接的时候需要传广播对象,否则返回的cid,vid,pid始终都是0 | |||
//每次连接之前都要设置一次,设置一次之后就一直有效 | |||
//sdk | |||
// AILinkBleManager.getInstance().init(mContext, new AILinkBleManager.onInitListener() { | |||
// @Override | |||
// public void onInitSuccess() { | |||
// AILinkBleManager.getInstance().startScan(0); | |||
// } | |||
// | |||
// @Override | |||
// public void onInitFailure() { | |||
// | |||
// } | |||
// }); | |||
// BleConfig.addVendorID(0xac05); | |||
AILinkSDK.getInstance().init(mContext); | |||
AILinkBleManager.getInstance().init(mContext, new AILinkBleManager.onInitListener() { | |||
@Override | |||
public void onInitSuccess() { | |||
AILinkBleManager.getInstance().startScan(0); | |||
} | |||
@Override | |||
public void onInitFailure() { | |||
} | |||
}); | |||
SP.init(this); | |||
} | |||
@@ -414,6 +490,10 @@ public class MainActivity extends AppCompatActivity { | |||
//体重秤 | |||
type = BleDeviceConfig.WEIGHT_SCALE; | |||
break; | |||
case R.id.btn_meat_probe: | |||
// 食物探针 | |||
type = BleDeviceConfig.MEAT_PROBE; | |||
break; | |||
case R.id.btn_mqtt: | |||
return; | |||
@@ -493,9 +573,8 @@ public class MainActivity extends AppCompatActivity { | |||
super.onRequestPermissionsResult(requestCode, permissions, grantResults); | |||
//请求权限被拒绝 | |||
if (requestCode != PERMISSION) { | |||
if (requestCode != PERMISSION) | |||
return; | |||
} | |||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { | |||
initPermissions(); | |||
} else { |
@@ -63,6 +63,8 @@ import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.blood_pressure_tc.BloodPre | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.coffee_scale.CoffeeScaleActivity; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.fascia_gun.FasciaGunActivity; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.food_temp.FoodTempActivity; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.meat_probe.MeatProbeActivity; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.meat_probe_charger.MeatProbeChargerActivity; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.noise_meter.BleNoiseMeterActivity; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.noise_meter.WifiBleNoiseMeterActivity; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.share_charger.ShareChargerActivity; | |||
@@ -131,9 +133,8 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle, | |||
super.onCreate(savedInstanceState); | |||
setContentView(R.layout.activity_show_ble); | |||
ActionBar supportActionBar = getSupportActionBar(); | |||
if (supportActionBar != null) { | |||
if (supportActionBar != null) | |||
supportActionBar.setTitle(getString(R.string.app_name) + BuildConfig.VERSION_NAME); | |||
} | |||
Intent mUserService = new Intent(this.getApplicationContext(), ELinkBleServer.class); | |||
//核心用户服务 | |||
startService(mUserService); | |||
@@ -266,10 +267,18 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle, | |||
//要加密要握手。别人家的东西 | |||
if (mVid == 0x0027 && mPid == 0x0001) { | |||
BleConfig.setHandshakeStatus(RopeSkippingBleData.LongXiang, mac, true); | |||
} else if (mVid == 0x0003 && mPid == 0x0009) { | |||
BleConfig.setHandshakeStatus(mac, true, mCid, mVid, mPid); | |||
//设置A7不加密 | |||
mNoEncryptionMac = mac; | |||
} | |||
} else if (mCid == BleDeviceConfig.LEAP_WATCH) { | |||
// 手表不握手 | |||
BleConfig.setHandshakeStatus(mac, false); | |||
} else if (mCid == BleDeviceConfig.MEAT_PROBE_CHARGER) { | |||
//探针充电盒握手 | |||
BleConfig.setHandshakeStatus(mac, true, mCid, mVid, mPid); | |||
mNoEncryptionMac = mac; | |||
} | |||
if (mBluetoothService != null) { | |||
mBluetoothService.stopScan(); | |||
@@ -381,6 +390,7 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle, | |||
public void onScanning(@NonNull BleValueBean data) { | |||
String mAddress = data.getMac(); | |||
BleLog.i(TAG, "MAC=" + mAddress + "||CID=" + data.getCid() + "||VID=" + data.getVid() + "||PID=" + data.getPid()); | |||
boolean oldData = false; | |||
for (int i = 0; i < mBleValueList.size(); i++) { | |||
BleValueBean bleValueBean = mBleValueList.get(i); | |||
@@ -429,39 +439,34 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle, | |||
bleDevice.setA7Encryption(false); | |||
mNoEncryptionMac = ""; | |||
} | |||
dismissLoading(); | |||
Intent intent = new Intent(); | |||
int type = mType;//默认婴儿秤 | |||
switch (type) { | |||
case BleDeviceConfig.BABY_SCALE: | |||
//婴儿秤 | |||
intent.setClass(ShowBleActivity.this, BabyCmdActivity.class); | |||
break; | |||
case BleDeviceConfig.INFRARED_THERMOMETER: | |||
//额温枪 | |||
intent.setClass(ShowBleActivity.this, TempGunCmdActivity.class); | |||
break; | |||
case BleDeviceConfig.BLOOD_PRESSURE: | |||
case BleDeviceConfig.SPHY_WIFI_BLE: | |||
//血压计 | |||
intent.setClass(ShowBleActivity.this, SphyCmdActivity.class); | |||
break; | |||
case BleDeviceConfig.THERMOMETER: | |||
//体温计 | |||
intent.setClass(ShowBleActivity.this, TempCmdActivity.class); | |||
break; | |||
case BleDeviceConfig.HEIGHT_METER: | |||
//身高仪 | |||
intent.setClass(ShowBleActivity.this, HeightCmdActivity.class); | |||
break; | |||
case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE: | |||
//体重体脂称 | |||
intent.setClass(ShowBleActivity.this, WeightScaleBleActivity.class); | |||
break; | |||
// case BleDeviceConfig.SMART_LOCK: | |||
// intent.setClass(ShowBleActivity.this, LockCmdActivity.class); | |||
// break; | |||
case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_AD: | |||
//体重体脂称 | |||
intent.setClass(ShowBleActivity.this, ADWeightScaleCmdActivity.class); | |||
break; | |||
case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_WIFI_BLE: | |||
@@ -508,6 +513,7 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle, | |||
break; | |||
case BleDeviceConfig.FIND_DEVICE: | |||
// 寻物器 | |||
// intent.setClass(ShowBleActivity.this, FindDeviceActivity.class); | |||
intent.setClass(ShowBleActivity.this, FindDeviceNewActivity.class); | |||
BleConfig.setHandshakeStatus(mac, false); | |||
break; | |||
@@ -516,7 +522,6 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle, | |||
intent.setClass(ShowBleActivity.this, FoodTempActivity.class); | |||
break; | |||
case BleDeviceConfig.HEIGHT_BODY_FAT: | |||
//身高体脂秤 | |||
intent.setClass(ShowBleActivity.this, HeightWeightScaleActivity.class); | |||
break; | |||
case BleDeviceConfig.TEMP_Humidity: | |||
@@ -559,7 +564,10 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle, | |||
case BleDeviceConfig.BLE_NOISE_METER: | |||
intent.setClass(ShowBleActivity.this, BleNoiseMeterActivity.class); | |||
break; | |||
//探针充电盒 | |||
case BleDeviceConfig.MEAT_PROBE_CHARGER: | |||
intent.setClass(ShowBleActivity.this, MeatProbeChargerActivity.class); | |||
break; | |||
//体脂秤 | |||
case BleDeviceConfig.WEIGHT_SCALE: | |||
intent.setClass(ShowBleActivity.this, WeightScaleActivity.class); | |||
@@ -587,6 +595,10 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle, | |||
//验证不握手不加密的界面 | |||
intent.setClass(ShowBleActivity.this, ClearShakeHandsActivity.class); | |||
break; | |||
//食物探针 | |||
case BleDeviceConfig.MEAT_PROBE: | |||
intent.setClass(ShowBleActivity.this, MeatProbeActivity.class); | |||
break; | |||
default: | |||
@@ -653,14 +665,6 @@ public class ShowBleActivity extends AppCompatActivity implements OnCallbackBle, | |||
} | |||
/** | |||
* 检查设备 | |||
* | |||
* @param scanCid 扫描cid | |||
* @param cid cid | |||
* @param nameAndMac 名字和mac过滤 | |||
* @return boolean | |||
*/ | |||
private boolean isCheckDevice(int scanCid, int cid, boolean nameAndMac) { | |||
boolean okDevice = false; | |||
if (scanCid == BleDeviceConfig.BLOOD_PRESSURE) { |
@@ -1,5 +1,6 @@ | |||
package aicare.net.cn.sdk.ailinksdkdemoandroid.config; | |||
/** | |||
* xing<br> | |||
* 2019/3/5<br> | |||
@@ -252,6 +253,10 @@ public class BleDeviceConfig { | |||
*/ | |||
public final static int WEIGHT_SCALE = 0X0056; | |||
/** | |||
* 食物探针 | |||
*/ | |||
public final static int MEAT_PROBE = 0X003F; | |||
//------------------特殊 | |||
@@ -265,3 +270,4 @@ public class BleDeviceConfig { | |||
*/ | |||
public final static int PUBLIC_BLE_NETWORK = -7; | |||
} | |||
@@ -415,16 +415,18 @@ public class AirDetectorActivity extends BleAppBaseActivity implements AirDetect | |||
String valueMin = ed_min.getText().toString().trim(); | |||
float myValueMax = valueMax.contains("\\.") ? Float.parseFloat(valueMax) : Integer.parseInt(valueMax); | |||
float myValueMin = valueMin.contains("\\.") ? Float.parseFloat(valueMin) : Integer.parseInt(valueMin); | |||
int warmStateTemp = Integer.parseInt(ed_warm_state.getText().toString().trim()); | |||
sendDataBean = AirSendUtil.setWarmTemp(supportBean.getPoint(), | |||
supportBean.getUnit(), myValueMax, myValueMin); | |||
supportBean.getUnit(), myValueMax, myValueMin, warmStateTemp); | |||
break; | |||
case AirConst.AIR_TYPE_HUMIDITY: | |||
valueMax = ed_max.getText().toString().trim(); | |||
valueMin = ed_min.getText().toString().trim(); | |||
myValueMax = valueMax.contains("\\.") ? Float.parseFloat(valueMax) : Integer.parseInt(valueMax); | |||
myValueMin = valueMin.contains("\\.") ? Float.parseFloat(valueMin) : Integer.parseInt(valueMin); | |||
int warmStateHumi = Integer.parseInt(ed_warm_state.getText().toString().trim()); | |||
sendDataBean = AirSendUtil.setWarmHumidity(supportBean.getPoint(), | |||
myValueMax, myValueMin); | |||
myValueMax, myValueMin, warmStateHumi); | |||
break; | |||
case AirConst.AIR_SETTING_VOICE: | |||
warmState = Integer.parseInt(ed_warm_state.getText().toString().trim()); |
@@ -50,6 +50,7 @@ public class AirUtil { | |||
typeNameArray.append(AirConst.AIR_ICON_DISPLAY, "图标显示"); | |||
typeNameArray.append(AirConst.AIR_MONITORING_DISPLAY_DATA, "监控显示数据"); | |||
typeNameArray.append(AirConst.AIR_DATA_DISPLAY_MODE, "数据显示模式"); | |||
typeNameArray.append(AirConst.AIR_PROTOCOL_VERSION, "协议版本"); | |||
} | |||
@@ -246,11 +247,11 @@ public class AirUtil { | |||
} | |||
StringBuilder builder = new StringBuilder(); | |||
for (AlarmClockInfoList.AlarmInfo bean : list) { | |||
builder.append(getSwitchStatus(bean.getSwitchStatus() == 1)); | |||
builder.append("编号:").append(bean.getId()); | |||
builder.append(", " + getSwitchStatus(bean.getSwitchStatus() == 1)); | |||
builder.append(", 删除:").append(bean.isDeleted()); | |||
builder.append(", 编号:").append(bean.getId()); | |||
builder.append(", 模式:").append(bean.getMode()); | |||
builder.append(", 闹钟时间:").append(bean.getHour()).append(":").append(bean.getMinute()); | |||
builder.append(", 闹钟时间:").append(dealTime(bean.getHour())).append(":").append(dealTime(bean.getMinute())); | |||
builder.append(", 闹钟周期:").append(dealAlarmDay(bean.getAlarmDays())); | |||
builder.append("\n"); | |||
} | |||
@@ -260,6 +261,13 @@ public class AirUtil { | |||
} | |||
} | |||
private static String dealTime(int num){ | |||
if (num < 10) { | |||
return "0" + num; | |||
} | |||
return num + ""; | |||
} | |||
private static String dealAlarmDay(int[] days){ | |||
if (days == null) { | |||
return ""; | |||
@@ -275,4 +283,29 @@ public class AirUtil { | |||
builder.append("]"); | |||
return builder.toString(); | |||
} | |||
public static int[] getAlarmClockDayByMode(int mode){ | |||
switch (mode){ | |||
case 1: | |||
return new int[]{0,1,1,1,1,1,1,1}; | |||
case 2: | |||
return new int[]{0,1,1,1,1,1,0,0}; | |||
case 3: | |||
return new int[]{0,1,1,1,1,1,1,0}; | |||
case 4: | |||
return new int[]{0,1,1,0,1,1,0,1}; | |||
case 0: | |||
default: | |||
return new int[]{0,0,0,0,0,0,0,0}; | |||
} | |||
} | |||
public static String dealWarnSwitch(int val){ | |||
if (val == 1) { | |||
return "各报警功能可单独设置开关"; | |||
} else if(val == 2){ | |||
return "报警功能只支持总开关"; | |||
} | |||
return "未知"; | |||
} | |||
} |
@@ -20,9 +20,12 @@ import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleAppBaseActivity; | |||
import androidx.lifecycle.Lifecycle; | |||
import androidx.recyclerview.widget.LinearLayoutManager; | |||
import androidx.recyclerview.widget.RecyclerView; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.airdetector.AirUtil; | |||
import cn.net.aicare.modulelibrary.module.airDetector.AirConst; | |||
import cn.net.aicare.modulelibrary.module.airDetector.AirDetectorWifeBleData; | |||
import cn.net.aicare.modulelibrary.module.airDetector.AirSendUtil; | |||
import cn.net.aicare.modulelibrary.module.airDetector.AlarmClockStatement; | |||
import cn.net.aicare.modulelibrary.module.airDetector.StatusBean; | |||
import cn.net.aicare.modulelibrary.module.airDetector.SupportBean; | |||
@@ -72,10 +75,11 @@ public class AirDetectorActivityTest extends BleAppBaseActivity implements AirDe | |||
private static final int STEP_CAL_TVOC = 36; // TVOC校准 | |||
private static final int STEP_CAL_CO = 37; // CO校准 | |||
private static final int STEP_SETTING_ALARM = 38; // 闹钟 | |||
private static final int STEP_SETTING_WARN_SWITCH = 39; // 报警总开关 | |||
// private static final int STEP_DEVICE_SELF_TEST = 18; // 设备自检 | |||
// private static final int STEP_DEVICE_BIND = 18; // 设备绑定 | |||
// private static final int STEP_RESTORE_FACTORY_SETTINGS = 18; // 恢复出厂设置 | |||
private static final int STEP_DONE = 39;// 结束 | |||
private static final int STEP_DONE = 40;// 结束 | |||
private static final int RESULT_NULL = 0; | |||
private static final int RESULT_SUCCESS = 1; | |||
@@ -283,6 +287,12 @@ public class AirDetectorActivityTest extends BleAppBaseActivity implements AirDe | |||
public void onStatusList(SparseArray<StatusBean> statusList) { | |||
if (mStep == STEP_REALTIME_STATUS) { | |||
stepSuccess(AirDetectorTestShowUtil.showTextStatus(statusList, deviceSupportList)); | |||
} else if (mStep == STEP_CAL_HCHO || mStep == STEP_CAL_TEMP || mStep == STEP_CAL_HUMIDITY || mStep == STEP_CAL_PM2_5 | |||
|| mStep == STEP_CAL_PM1_0 || mStep == STEP_CAL_VOC || mStep == STEP_CAL_CO2 || mStep == STEP_CAL_AQI | |||
|| mStep == STEP_CAL_TVOC || mStep == STEP_CAL_CO) { | |||
if (statusList.get(AirConst.AIR_CALIBRATION_PARAMETERS) != null) { | |||
stepSuccess(AirDetectorTestShowUtil.showCalSettingAfterTextStatus(statusList, deviceSupportList)); | |||
} | |||
} | |||
} | |||
@@ -317,21 +327,21 @@ public class AirDetectorActivityTest extends BleAppBaseActivity implements AirDe | |||
type = AirConst.AIR_TYPE_FORMALDEHYDE; | |||
if (isSupportWarmType(type)) { | |||
addTest("设置甲醛报警"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmMaxByType(type, switchOpenFlag, 0.08f, deviceSupportList.get(type).getPoint())); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmMaxByType(type, switchOpenFlag, 0.10f, deviceSupportList.get(type).getPoint())); | |||
} | |||
break; | |||
case STEP_WARM_TEMP: | |||
type = AirConst.AIR_TYPE_TEMP; | |||
if (isSupportWarmType(type)) { | |||
addTest("设置温度报警"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmTemp(0, AirConst.UNIT_C, 30f, 0f)); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmTemp(0, AirConst.UNIT_C, 30f, 0f, 1)); | |||
} | |||
break; | |||
case STEP_WARM_HUMIDITY: | |||
type = AirConst.AIR_TYPE_HUMIDITY; | |||
if (isSupportWarmType(type)) { | |||
addTest("设置湿度报警"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmHumidity(0, 60f, 7f)); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmHumidity(0, 60f, 7f, 1)); | |||
} | |||
break; | |||
case STEP_WARM_PM2_5: | |||
@@ -467,77 +477,77 @@ public class AirDetectorActivityTest extends BleAppBaseActivity implements AirDe | |||
case STEP_CAL_HCHO: | |||
type = AirConst.AIR_TYPE_FORMALDEHYDE; | |||
if (isSupportCalType(type)) { | |||
addTest("设置甲醛校准"); | |||
addTest("设置甲醛校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_TEMP: | |||
type = AirConst.AIR_TYPE_TEMP; | |||
if (isSupportCalType(type)) { | |||
addTest("设置温度校准"); | |||
addTest("设置温度校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_HUMIDITY: | |||
type = AirConst.AIR_TYPE_HUMIDITY; | |||
if (isSupportCalType(type)) { | |||
addTest("设置湿度校准"); | |||
addTest("设置湿度校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_PM2_5: | |||
type = AirConst.AIR_TYPE_PM_2_5; | |||
if (isSupportCalType(type)) { | |||
addTest("设置PM2.5校准"); | |||
addTest("设置PM2.5校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_PM1_0: | |||
type = AirConst.AIR_TYPE_PM_1; | |||
if (isSupportCalType(type)) { | |||
addTest("设置PM1.0校准"); | |||
addTest("设置PM1.0校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_PM10: | |||
type = AirConst.AIR_TYPE_PM_10; | |||
if (isSupportCalType(type)) { | |||
addTest("设置PM10校准"); | |||
addTest("设置PM10校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_VOC: | |||
type = AirConst.AIR_TYPE_VOC; | |||
if (isSupportCalType(type)) { | |||
addTest("设置VOC校准"); | |||
addTest("设置VOC校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_CO2: | |||
type = AirConst.AIR_TYPE_CO2; | |||
if (isSupportCalType(type)) { | |||
addTest("设置二氧化碳校准"); | |||
addTest("设置二氧化碳校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_AQI: | |||
type = AirConst.AIR_TYPE_AQI; | |||
if (isSupportCalType(type)) { | |||
addTest("设置空气质量校准"); | |||
addTest("设置空气质量校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_TVOC: | |||
type = AirConst.AIR_TYPE_TVOC; | |||
if (isSupportCalType(type)) { | |||
addTest("设置TVOC校准"); | |||
addTest("设置TVOC校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
case STEP_CAL_CO: | |||
type = AirConst.AIR_TYPE_CO; | |||
if (isSupportCalType(type)) { | |||
addTest("设置一氧化碳校准"); | |||
addTest("设置一氧化碳校准, 单位校准值加1"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | |||
} | |||
break; | |||
@@ -545,8 +555,34 @@ public class AirDetectorActivityTest extends BleAppBaseActivity implements AirDe | |||
type = AirConst.AIR_ALARM_CLOCK; | |||
if (isSupportType(type)) { | |||
addTest("设置闹钟"); | |||
int[] days = {0,1,1,1,1,1,1,0}; | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setAlarm(1, 14, 30, days, 4, 0, false)); | |||
SupportBean supportBean = deviceSupportList.get(AirConst.AIR_ALARM_CLOCK); | |||
if (supportBean.getExtentObject() != null) { | |||
AlarmClockStatement alarmClockStatement = (AlarmClockStatement) supportBean.getExtentObject(); | |||
int mode = 0; | |||
if (alarmClockStatement.isMode4()) { | |||
mode = 4; | |||
} else if (alarmClockStatement.isMode0()) { | |||
mode = 0; | |||
} else if (alarmClockStatement.isMode1()) { | |||
mode = 1; | |||
} else if (alarmClockStatement.isMode2()) { | |||
mode = 2; | |||
} else if (alarmClockStatement.isMode3()) { | |||
mode = 3; | |||
} | |||
int[] days = AirUtil.getAlarmClockDayByMode(mode); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setAlarm(1, 14, 30, days, 4, 0, false)); | |||
} | |||
} | |||
break; | |||
case STEP_SETTING_WARN_SWITCH: | |||
type = AirConst.AIR_SETTING_WARM; | |||
if (isSupportType(type) && deviceSupportList.get(type).getCurValue() == 0x02) { | |||
addTest("设置指标报警总开关"); | |||
mAirDetectorWifeBleData.sendData(AirSendUtil.setMasterWarnSwitch(1)); | |||
} else { | |||
mStep = getNextStep(); | |||
test(); | |||
} | |||
break; | |||
case STEP_DONE: | |||
@@ -984,6 +1020,13 @@ public class AirDetectorActivityTest extends BleAppBaseActivity implements AirDe | |||
} | |||
} | |||
@Override | |||
public void onResultMasterWarnSwitch(String content) { | |||
if (mStep == STEP_SETTING_WARN_SWITCH) { | |||
stepSuccess(content); | |||
} | |||
} | |||
@Override | |||
public void onCalResultHCHO(String content) { | |||
if (mStep == STEP_CAL_HCHO) { |
@@ -107,15 +107,34 @@ public class AirDetectorTestShowUtil { | |||
return builder.toString(); | |||
} | |||
/** | |||
* 参数校准后,实时状态返回 | |||
* | |||
* @param statusList | |||
* @param supportList | |||
* @return | |||
*/ | |||
public static String showCalSettingAfterTextStatus(SparseArray<StatusBean> statusList, SparseArray<SupportBean> supportList) { | |||
StringBuilder builder = new StringBuilder(); | |||
StatusBean statusBean = statusList.get(AirConst.AIR_CALIBRATION_PARAMETERS); | |||
// 支持列表不包含,添加空字符串 | |||
SupportBean supportBean = supportList.get(AirConst.AIR_CALIBRATION_PARAMETERS); | |||
if (supportBean != null) { | |||
builder.append(AirUtil.dealCalResultAllStatus(statusBean, supportList)); | |||
} | |||
return builder.toString(); | |||
} | |||
/** | |||
* 设置指令返回 | |||
* | |||
* @param settingList | |||
* @param supportList | |||
* @Param resultInterface | |||
* @return | |||
* @Param resultInterface | |||
*/ | |||
public static String showGetResultSettings(SparseArray<StatusBean> settingList, SparseArray<SupportBean> supportList){ | |||
public static String showGetResultSettings(SparseArray<StatusBean> settingList, SparseArray<SupportBean> supportList) { | |||
StringBuilder builder = new StringBuilder(); | |||
for (int i = 0; i < settingList.size(); i++) { | |||
int type = settingList.keyAt(i); | |||
@@ -141,11 +160,11 @@ public class AirDetectorTestShowUtil { | |||
break; | |||
case AirConst.AIR_TYPE_HUMIDITY: | |||
int hPow = (int) Math.pow(10, supportBean.getPoint()); | |||
String humpStr = "下限值:" + settingBean.getWarmMin() / hPow + ", 上限值: "+ settingBean.getWarmMax() / hPow; | |||
String humpStr = "下限值:" + settingBean.getWarmMin() / hPow + ", 上限值: " + settingBean.getWarmMax() / hPow; | |||
builder.append(humpStr); | |||
break; | |||
case AirConst.AIR_TYPE_TEMP: | |||
String tempStr = "下限值:" + settingBean.getWarmMin() + ", 上限值: "+ settingBean.getWarmMax(); | |||
String tempStr = "下限值:" + settingBean.getWarmMin() + ", 上限值: " + settingBean.getWarmMax(); | |||
builder.append(tempStr); | |||
break; | |||
case AirConst.AIR_SETTING_VOICE: | |||
@@ -242,15 +261,15 @@ public class AirDetectorTestShowUtil { | |||
resultInterface.onWarmResultCO(AirUtil.getWarmResultStr(supportBean, resultBean)); | |||
break; | |||
case AirConst.AIR_TYPE_HUMIDITY: | |||
String humpStr = "下限值:" + resultBean.getWarmMin() + ", 上限值: "+ resultBean.getWarmMax(); | |||
String humpStr = "下限值:" + resultBean.getWarmMin() + ", 上限值: " + resultBean.getWarmMax(); | |||
resultInterface.onWarmResultHumidity(humpStr); | |||
break; | |||
case AirConst.AIR_TYPE_TEMP: | |||
String tempStr = "下限值:" + resultBean.getWarmMin() + ", 上限值: "+ resultBean.getWarmMax(); | |||
String tempStr = "下限值:" + resultBean.getWarmMin() + ", 上限值: " + resultBean.getWarmMax(); | |||
resultInterface.onWarmResultTemp(tempStr); | |||
break; | |||
case AirConst.AIR_SETTING_VOICE: | |||
resultInterface.onResultVoice("开关:" + AirUtil.getSwitchStatus(resultBean.isOpen()) + ", Level: "+ resultBean.getValue()); | |||
resultInterface.onResultVoice("开关:" + AirUtil.getSwitchStatus(resultBean.isOpen()) + ", Level: " + resultBean.getValue()); | |||
break; | |||
case AirConst.AIR_SETTING_WARM_DURATION: | |||
resultInterface.onResultWarmDuration("时长:" + resultBean.getValue() + " S"); | |||
@@ -297,6 +316,9 @@ public class AirDetectorTestShowUtil { | |||
case AirConst.AIR_MONITORING_DISPLAY_DATA: | |||
resultInterface.onResultMonitoringDisplayData("监测显示数据开关:" + AirUtil.getSwitchStatus(resultBean.isOpen())); | |||
break; | |||
case AirConst.AIR_SETTING_WARM: | |||
resultInterface.onResultMasterWarnSwitch("指标报警总开关:" + AirUtil.getSwitchStatus(resultBean.isOpen())); | |||
break; | |||
default: | |||
break; | |||
} | |||
@@ -318,7 +340,7 @@ public class AirDetectorTestShowUtil { | |||
} | |||
for (CalibrationListBean.CalibrationBean bean : list) { | |||
String resultStr = AirUtil.getOperateStr(bean.getCalOperate()); | |||
switch (bean.getCalType()){ | |||
switch (bean.getCalType()) { | |||
case AirConst.AIR_TYPE_FORMALDEHYDE: | |||
resultInterface.onCalResultHCHO(resultStr); | |||
break; |
@@ -113,6 +113,13 @@ public interface SettingResultInterface { | |||
* @param content | |||
*/ | |||
public void onResultDataDisplayMode(String content); | |||
/** | |||
* 报警总开关设置 | |||
* @param content | |||
*/ | |||
public void onResultMasterWarnSwitch(String content); | |||
/** | |||
* 甲醛校准 | |||
* @param content |
@@ -0,0 +1,164 @@ | |||
package aicare.net.cn.sdk.ailinksdkdemoandroid.modules.meat_probe; | |||
public class FoodConfig { | |||
/** | |||
* 摄氏度 | |||
*/ | |||
public static final int UNIT_C = 0; | |||
/** | |||
* 华氏度 | |||
*/ | |||
public static final int UNIT_F = 1; | |||
/** | |||
* 牛肉 | |||
*/ | |||
public static final int FOOD_TYPE_BEEF = 0; | |||
/** | |||
* 小牛肉 | |||
*/ | |||
public static final int FOOD_TYPE_VEAL = 1; | |||
/** | |||
* 羊肉 | |||
*/ | |||
public static final int FOOD_TYPE_LAMB = 2; | |||
/** | |||
* 猪肉 | |||
*/ | |||
public static final int FOOD_TYPE_PORK = 3; | |||
/** | |||
* 鸡肉 | |||
*/ | |||
public static final int FOOD_TYPE_CHICKEN = 4; | |||
/** | |||
* 火鸡肉 | |||
*/ | |||
public static final int FOOD_TYPE_TURKEY = 5; | |||
/** | |||
* 鱼肉 | |||
*/ | |||
public static final int FOOD_TYPE_FISH = 6; | |||
/** | |||
* 汉堡 | |||
*/ | |||
public static final int FOOD_TYPE_HAMBURGER = 7; | |||
/** | |||
* 其它 | |||
*/ | |||
public static final int FOOD_TYPE_OTHER = 8; | |||
/** | |||
* 食物类型未设置 | |||
*/ | |||
public static final int FOOD_TYPE_NO_SETTING = 9; | |||
/** | |||
* 食品成熟度 DIY | |||
*/ | |||
public static final int FOOD_DEGREE_DIY = 4; | |||
/** | |||
* 三分熟 | |||
*/ | |||
public static final int FOOD_DEGREE_MRATE = 0; | |||
/** | |||
* 五分熟 | |||
*/ | |||
public static final int FOOD_DEGREE_MEDIUM = 1; | |||
/** | |||
* 七分熟 | |||
*/ | |||
public static final int FOOD_DEGREE_MWELL = 2; | |||
/** | |||
* 全熟 | |||
*/ | |||
public static final int FOOD_DEGREE_WELL = 3; | |||
/** | |||
* 报警 铃声 | |||
*/ | |||
public static final int ALERT_TYPE_RING = 0; | |||
/** | |||
* 报警 震动 | |||
*/ | |||
public static final int ALERT_TYPE_SHOCK = 1; | |||
/** | |||
* 报警 铃声和震动 | |||
*/ | |||
public static final int ALERT_TYPE_RING_AND_SHOCK = 2; | |||
/** | |||
* 烧烤模式 烤炉 | |||
*/ | |||
public static final int FOOD_COOK_MODE_OVEN = 0; | |||
/** | |||
* 烧烤 | |||
*/ | |||
public static final int FOOD_COOK_MODE_BARBECUE = 1; | |||
/** | |||
* 正常状态 | |||
*/ | |||
public static final int BATTERY_STATE_NORMAL = 0; | |||
/** | |||
* 充电中 | |||
*/ | |||
public static final int BATTERY_STATE_CHARGING = 1; | |||
/** | |||
* 设备低电 | |||
*/ | |||
public static final int BATTERY_STATE_LOW = 2; | |||
/** | |||
* 设置温度单位 | |||
*/ | |||
public static final String BROADCAST_SET_TEMP_UNIT = "BROADCAST_SET_TEMP_UNIT"; | |||
/** | |||
* 温度为这个值就不处理,-16383为0xFFFF的前13个bit | |||
*/ | |||
public static final int DISABLE_TEMP = 0xFFFF; | |||
/** | |||
* 设备高温警告(摄氏度) | |||
*/ | |||
public static final int DEVICE_HIGH_TEMP_C = 85; | |||
/** | |||
* 设备高温警告(华氏度) | |||
*/ | |||
public static final int DEVICE_HIGH_TEMP_F = 185; | |||
/** | |||
* 设备超高温警告(摄氏度) | |||
*/ | |||
public static final int DEVICE_SUPER_HIGH_TEMP_C = 100; | |||
/** | |||
* 设备超高温警告(华氏度) | |||
*/ | |||
public static final int DEVICE_SUPER_HIGH_TEMP_F = 212; | |||
} | |||
@@ -0,0 +1,340 @@ | |||
package aicare.net.cn.sdk.ailinksdkdemoandroid.modules.meat_probe; | |||
import android.os.Bundle; | |||
import android.util.Log; | |||
import android.view.View; | |||
import android.widget.ArrayAdapter; | |||
import android.widget.Button; | |||
import android.widget.ListView; | |||
import android.widget.TextView; | |||
import android.widget.Toast; | |||
import androidx.annotation.Nullable; | |||
import com.pingwang.bluetoothlib.device.BleDevice; | |||
import com.pingwang.bluetoothlib.listener.CallbackDisIm; | |||
import com.pingwang.bluetoothlib.listener.OnCallbackBle; | |||
import com.pingwang.bluetoothlib.utils.BleStrUtils; | |||
import java.text.SimpleDateFormat; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.Locale; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.R; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity; | |||
import cn.net.aicare.modulelibrary.module.meatprobe.MeatProbeBleData; | |||
import cn.net.aicare.modulelibrary.module.meatprobe.MeatProbeSendCmdUtil; | |||
import cn.net.aicare.modulelibrary.module.meatprobe.OnMeatProbeDataListener; | |||
import cn.net.aicare.modulelibrary.module.meatprobe.ProbeBean; | |||
import cn.net.aicare.modulelibrary.module.meatprobe.ProbeNowBean; | |||
/** | |||
* @author ljl | |||
* on 2023/6/6 | |||
*/ | |||
public class MeatProbeActivity extends BleBaseActivity implements OnCallbackBle, OnMeatProbeDataListener, View.OnClickListener { | |||
private Button btn_meat_probe_connect, btn_meat_probe_disconnect; | |||
private Button btn_meat_probe_version, btn_meat_probe_battery; | |||
private Button btn_meat_probe_switch_unit, btn_meat_probe_get_info; | |||
private Button btn_meat_probe_start, btn_meat_probe_end; | |||
private TextView tv_meat_probe_ambient, tv_meat_probe_internal, tv_meat_probe_target; | |||
private TextView tv_meat_probe_battery, tv_meat_probe_version; | |||
private TextView tv_meat_probe_ambient_unit, tv_meat_probe_internal_unit, tv_meat_probe_target_unit; | |||
ListView list_view_meat_probe; | |||
private List<String> mList; | |||
private ArrayAdapter mListAdapter; | |||
private String mMac; | |||
private int mCid; | |||
private int mVid; | |||
private int mPid; | |||
private BleDevice mBleDevice; | |||
private MeatProbeBleData mMeatProbeBleData; | |||
private long mCookingId; | |||
private double percent = 0.8; | |||
private int foodType = 0; | |||
private int foodRawness = 2; | |||
private int unit = 0; | |||
private ProbeBean mProbeBean; | |||
@Override | |||
protected void onCreate(@Nullable Bundle savedInstanceState) { | |||
super.onCreate(savedInstanceState); | |||
setContentView(R.layout.activity_meat_probe); | |||
initView(); | |||
initData(); | |||
} | |||
/** | |||
* 初始化控件 | |||
*/ | |||
private void initView() { | |||
btn_meat_probe_connect = findViewById(R.id.btn_meat_probe_connect); | |||
btn_meat_probe_disconnect = findViewById(R.id.btn_meat_probe_disconnect); | |||
btn_meat_probe_version = findViewById(R.id.btn_meat_probe_version); | |||
btn_meat_probe_battery = findViewById(R.id.btn_meat_probe_battery); | |||
btn_meat_probe_switch_unit = findViewById(R.id.btn_meat_probe_switch_unit); | |||
btn_meat_probe_get_info = findViewById(R.id.btn_meat_probe_get_info); | |||
btn_meat_probe_start = findViewById(R.id.btn_meat_probe_start); | |||
btn_meat_probe_end = findViewById(R.id.btn_meat_probe_end); | |||
tv_meat_probe_ambient = findViewById(R.id.tv_meat_probe_ambient); | |||
tv_meat_probe_internal = findViewById(R.id.tv_meat_probe_internal); | |||
tv_meat_probe_battery = findViewById(R.id.tv_meat_probe_battery); | |||
tv_meat_probe_version = findViewById(R.id.tv_meat_probe_version); | |||
tv_meat_probe_target = findViewById(R.id.tv_meat_probe_target); | |||
tv_meat_probe_ambient_unit = findViewById(R.id.tv_meat_probe_ambient_unit); | |||
tv_meat_probe_internal_unit = findViewById(R.id.tv_meat_probe_internal_unit); | |||
tv_meat_probe_target_unit = findViewById(R.id.tv_meat_probe_target_unit); | |||
list_view_meat_probe = findViewById(R.id.list_view_meat_probe); | |||
} | |||
/** | |||
* 初始化数据 | |||
*/ | |||
private void initData() { | |||
if (getIntent() != null) { | |||
mMac = getIntent().getStringExtra("mac"); | |||
mCid = getIntent().getIntExtra("type", 0); | |||
mVid = getIntent().getIntExtra("vid", 0); | |||
mPid = getIntent().getIntExtra("pid", 0); | |||
} | |||
CallbackDisIm.getInstance().addListListener(this); | |||
btn_meat_probe_connect.setOnClickListener(this); | |||
btn_meat_probe_disconnect.setOnClickListener(this); | |||
btn_meat_probe_version.setOnClickListener(this); | |||
btn_meat_probe_battery.setOnClickListener(this); | |||
btn_meat_probe_switch_unit.setOnClickListener(this); | |||
btn_meat_probe_get_info.setOnClickListener(this); | |||
btn_meat_probe_start.setOnClickListener(this); | |||
btn_meat_probe_end.setOnClickListener(this); | |||
mProbeBean = new ProbeBean(mMac); | |||
mProbeBean.setAlarmTemperaturePercent(0.8); | |||
mProbeBean.setFoodType(foodType); | |||
mProbeBean.setFoodRawness(foodRawness); | |||
mProbeBean.setTargetTemperature_C(65); | |||
mProbeBean.setTargetTemperature_F(149); | |||
mProbeBean.setAmbientMinTemperature_C(0); | |||
mProbeBean.setAmbientMinTemperature_F(32); | |||
mProbeBean.setAmbientMaxTemperature_C(100); | |||
mProbeBean.setAmbientMaxTemperature_F(212); | |||
mProbeBean.setTimerStart(0); | |||
mProbeBean.setTimerEnd(0); | |||
//初始化列表 | |||
mList = new ArrayList<>(); | |||
mListAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mList); | |||
list_view_meat_probe.setAdapter(mListAdapter); | |||
} | |||
/** | |||
* 添加一条文本 | |||
* | |||
* @param text 文本 | |||
*/ | |||
private void addText(String text) { | |||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss", Locale.US); | |||
mList.add(sdf.format(System.currentTimeMillis()) + ":\n" + text); | |||
if (mListAdapter != null) { | |||
mListAdapter.notifyDataSetChanged(); | |||
} | |||
if (list_view_meat_probe != null) { | |||
list_view_meat_probe.smoothScrollToPosition(mList.size() - 1); | |||
} | |||
} | |||
@Override | |||
public void onServiceSuccess() { | |||
if (mBluetoothService != null) { | |||
mBluetoothService.setOnCallback(this); | |||
BleDevice bleDevice = mBluetoothService.getBleDevice(mMac); | |||
MeatProbeBleData.init(bleDevice); | |||
mMeatProbeBleData = MeatProbeBleData.getInstance(); | |||
mMeatProbeBleData.addOnMeatProbeDataListener(this); | |||
MeatProbeSendCmdUtil.getInstance().setListeners(this); | |||
} | |||
} | |||
@Override | |||
public void onServiceErr() { | |||
} | |||
@Override | |||
public void unbindServices() { | |||
} | |||
@Override | |||
public void onServicesDiscovered(String mac) { | |||
//连接成功 | |||
Log.e("ljl", "onServicesDiscovered: mac is " + mac); | |||
if (mBluetoothService != null) { | |||
mBluetoothService.setOnCallback(this); | |||
BleDevice bleDevice = mBluetoothService.getBleDevice(mMac); | |||
MeatProbeBleData.init(bleDevice); | |||
mMeatProbeBleData = MeatProbeBleData.getInstance(); | |||
mMeatProbeBleData.addOnMeatProbeDataListener(this); | |||
MeatProbeSendCmdUtil.getInstance().setListeners(this); | |||
} | |||
} | |||
@Override | |||
public void onDisConnected(String mac, int code) { | |||
//断开连接 | |||
Toast.makeText(this, "断开连接", Toast.LENGTH_SHORT).show(); | |||
} | |||
@Override | |||
public void onClick(View v) { | |||
switch (v.getId()) { | |||
case R.id.btn_meat_probe_connect: | |||
if (mBluetoothService != null) { | |||
mBluetoothService.connectDevice(mMac); | |||
} | |||
break; | |||
case R.id.btn_meat_probe_disconnect: | |||
if (mBluetoothService != null) { | |||
mBluetoothService.disconnect(mMac); | |||
} | |||
break; | |||
case R.id.btn_meat_probe_version: | |||
if (mMeatProbeBleData != null) { | |||
mMeatProbeBleData.getVersionInfo(); | |||
} | |||
break; | |||
case R.id.btn_meat_probe_battery: | |||
if (mMeatProbeBleData != null) { | |||
mMeatProbeBleData.getBattery(); | |||
} | |||
break; | |||
case R.id.btn_meat_probe_switch_unit: | |||
if (mMeatProbeBleData != null) { | |||
//0-摄氏度 1-华氏度 | |||
if (unit == 0) { | |||
mMeatProbeBleData.sendSwitchUnit(1); | |||
} else { | |||
mMeatProbeBleData.sendSwitchUnit(0); | |||
} | |||
} | |||
break; | |||
case R.id.btn_meat_probe_get_info: | |||
if (mMeatProbeBleData != null) { | |||
mMeatProbeBleData.appGetDeviceInfo(); | |||
} | |||
break; | |||
case R.id.btn_meat_probe_start: | |||
if (mMeatProbeBleData != null) { | |||
mProbeBean.setCookingId(System.currentTimeMillis()); | |||
mProbeBean.setCurrentUnit(unit); | |||
mMeatProbeBleData.appSetDeviceInfo(mProbeBean); | |||
} | |||
break; | |||
case R.id.btn_meat_probe_end: | |||
if (mMeatProbeBleData != null) { | |||
mMeatProbeBleData.endWork(); | |||
} | |||
break; | |||
default: | |||
break; | |||
} | |||
} | |||
@Override | |||
protected void onDestroy() { | |||
super.onDestroy(); | |||
if (mBluetoothService != null) { | |||
mBluetoothService.disconnect(mMac); | |||
} | |||
} | |||
@Override | |||
public void onBleNowData(String mac, ProbeNowBean probeNowBean) { | |||
//当前单位取实时温度的单位 | |||
unit = probeNowBean.getRealTimeUnit(); | |||
//环境温度 | |||
tv_meat_probe_ambient.setText("环境温度:" + (probeNowBean.getAmbientPositive() == 0 ? probeNowBean.getAmbientTemp() : -probeNowBean.getAmbientTemp())); | |||
//食物温度 | |||
tv_meat_probe_internal.setText("食物温度:" + (probeNowBean.getRealTimePositive() == 0 ? probeNowBean.getRealTimeTemp() : -probeNowBean.getRealTimeTemp())); | |||
//环境温度单位 | |||
tv_meat_probe_ambient_unit.setText("环境温度单位:" + (probeNowBean.getAmbientUnit() == 0 ? "0(℃)" : "1(℉)")); | |||
//食物温度单位 | |||
tv_meat_probe_internal_unit.setText("食物温度单位:" + (probeNowBean.getRealTimeUnit() == 0 ? "0(℃)" : "1(℉)")); | |||
// addText("环境温度:" + (probeNowBean.getAmbientPositive() == 0 ? probeNowBean.getAmbientTemp() : -probeNowBean.getAmbientTemp()) + | |||
// "食物温度:" + (probeNowBean.getRealTimePositive() == 0 ? probeNowBean.getRealTimeTemp() : -probeNowBean.getRealTimeTemp()) + | |||
// "目标温度:" + (probeNowBean.getTargetPositive() == 0 ? probeNowBean.getTargetTemp() : -probeNowBean.getTargetTemp()) + | |||
// "环境温度单位:" + (probeNowBean.getAmbientUnit() == 0 ? "0(℃)" : "1(℉)") + | |||
// "食物温度单位:" + (probeNowBean.getRealTimeUnit() == 0 ? "0(℃)" : "1(℉)") + | |||
// "目标温度单位:" + (probeNowBean.getTargetUnit() == 0 ? "0(℃)" : "1(℉)")); | |||
} | |||
@Override | |||
public void onBatteryState(String mac, int status, int battery) { | |||
Log.e("ljl", "onBatteryState: mac is " + mac + " status is " + status + " battery is " + battery); | |||
//当前电量 | |||
tv_meat_probe_battery.setText("当前电量:" + battery); | |||
addText("当前电量:" + battery); | |||
} | |||
@Override | |||
public void onMcuVersionInfo(String mac, String versionInfo) { | |||
Log.e("ljl", "onMcuVersionInfo: mac is " + mac + " versionInfo is " + versionInfo); | |||
//版本号 | |||
tv_meat_probe_version.setText("模块版本号:" + versionInfo); | |||
addText("模块版本号:" + versionInfo); | |||
} | |||
@Override | |||
public void getDeviceInfo(String mac, ProbeBean probeBean) { | |||
//目标温度 | |||
tv_meat_probe_target.setText("目标温度:" + probeBean.getTargetTemperature_C()); | |||
//目标温度单位 | |||
tv_meat_probe_target_unit.setText("目标温度单位:" + (probeBean.getCurrentUnit() == 0 ? "0(℃)" : "1(℉)")); | |||
} | |||
@Override | |||
public void getInfoFailed(String mac) { | |||
Log.e("ljl", "getInfoFailed: mac is " + mac); | |||
} | |||
@Override | |||
public void getInfoSuccess(String mac) { | |||
Log.e("ljl", "getInfoSuccess: mac is " + mac); | |||
} | |||
@Override | |||
public void onDataNotifyA7(String mac, byte[] dataA7) { | |||
//接收到的A7 payload数据 | |||
addText("接收的A7 payload[" + BleStrUtils.byte2HexStr(dataA7) + "]"); | |||
} | |||
@Override | |||
public void onDataNotifyA6(String mac, byte[] dataA6) { | |||
//接收到的A6 payload数据 | |||
addText("接收的A6 payload[" + BleStrUtils.byte2HexStr(dataA6) + "]"); | |||
} | |||
@Override | |||
public void onDataA6(byte[] dataA6) { | |||
//发出的A6 payload数据 | |||
addText("发送的A6 payload[" + BleStrUtils.byte2HexStr(dataA6) + "]"); | |||
} | |||
@Override | |||
public void onDataA7(byte[] dataA7) { | |||
//发出的A7 payload数据 | |||
addText("发送的A7 payload[" + BleStrUtils.byte2HexStr(dataA7) + "]"); | |||
} | |||
} |
@@ -0,0 +1,452 @@ | |||
package aicare.net.cn.sdk.ailinksdkdemoandroid.modules.meat_probe_charger; | |||
import android.os.Bundle; | |||
import android.text.InputType; | |||
import android.text.TextUtils; | |||
import android.util.Log; | |||
import android.view.View; | |||
import android.widget.ArrayAdapter; | |||
import android.widget.Button; | |||
import android.widget.EditText; | |||
import android.widget.ListView; | |||
import android.widget.TextView; | |||
import android.widget.Toast; | |||
import androidx.annotation.Nullable; | |||
import com.pingwang.bluetoothlib.config.BleConfig; | |||
import com.pingwang.bluetoothlib.device.BleDevice; | |||
import java.text.SimpleDateFormat; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.Locale; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.R; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.DialogStringImageAdapter; | |||
import aicare.net.cn.sdk.ailinksdkdemoandroid.dialog.ShowListDialogFragment; | |||
import cn.net.aicare.modulelibrary.module.meatprobecharger.ChargerProbeBean; | |||
import cn.net.aicare.modulelibrary.module.meatprobecharger.MeatProbeChargerBleDevice; | |||
/** | |||
* @auther ljl | |||
* 食物探针充电盒ble | |||
* on 2023/2/24 | |||
*/ | |||
public class MeatProbeChargerActivity extends BleBaseActivity implements View.OnClickListener, MeatProbeChargerBleDevice.OnMeatProbeChargerDataListener { | |||
private String mMac; | |||
private int mVid; | |||
private BleDevice mBleDevice; | |||
private ListView list_view; | |||
private List<String> mList; | |||
private ArrayAdapter mListAdapter; | |||
private List<String> mMacList; | |||
private List<DialogStringImageAdapter.DialogStringImageBean> mDialogMacList; | |||
private MeatProbeChargerBleDevice mMeatProbeChargerBleDevice; | |||
private Button btn_probe_version, btn_probe_sync_time, btn_probe_info, btn_probe_clear; | |||
private Button btn_probe_set, btn_probe_get, btn_probe_unit, btn_probe_set_alarm; | |||
private Button btn_probe_clear_alarm, btn_probe_set_hand; | |||
private EditText et_probe_set_hand; | |||
private TextView tv_version, tv_other; | |||
private List<ChargerProbeBean> mChargerProbeBeanList; | |||
@Override | |||
protected void onCreate(@Nullable Bundle savedInstanceState) { | |||
super.onCreate(savedInstanceState); | |||
setContentView(R.layout.activity_meat_probe_charger); | |||
initView(); | |||
mMac = getIntent().getStringExtra("mac"); | |||
mVid = getIntent().getIntExtra("vid", 0); | |||
// 初始化列表 | |||
mList = new ArrayList<>(); | |||
mMacList = new ArrayList<>(); | |||
// mMacList.add("44:33:22:11:10:10"); | |||
// mMacList.add("44:33:22:11:10:09"); | |||
// mMacList.add("44:33:22:11:10:08"); | |||
// mMacList.add("44:33:22:11:10:07"); | |||
mDialogMacList = new ArrayList<>(); | |||
// mDialogMacList.add(new DialogStringImageAdapter.DialogStringImageBean("44:33:22:11:10:10", 0)); | |||
// mDialogMacList.add(new DialogStringImageAdapter.DialogStringImageBean("44:33:22:11:10:09", 0)); | |||
// mDialogMacList.add(new DialogStringImageAdapter.DialogStringImageBean("44:33:22:11:10:08", 0)); | |||
// mDialogMacList.add(new DialogStringImageAdapter.DialogStringImageBean("44:33:22:11:10:07", 0)); | |||
mListAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mList); | |||
list_view.setAdapter(mListAdapter); | |||
} | |||
private void initView() { | |||
list_view = findViewById(R.id.list_view); | |||
btn_probe_version = findViewById(R.id.btn_probe_version); | |||
btn_probe_sync_time = findViewById(R.id.btn_probe_sync_time); | |||
btn_probe_info = findViewById(R.id.btn_probe_info); | |||
btn_probe_set = findViewById(R.id.btn_probe_set); | |||
btn_probe_get = findViewById(R.id.btn_probe_get); | |||
btn_probe_unit = findViewById(R.id.btn_probe_unit); | |||
btn_probe_set_alarm = findViewById(R.id.btn_probe_set_alarm); | |||
btn_probe_clear = findViewById(R.id.btn_probe_clear); | |||
btn_probe_clear_alarm = findViewById(R.id.btn_probe_clear_alarm); | |||
btn_probe_set_hand = findViewById(R.id.btn_probe_set_hand); | |||
et_probe_set_hand = findViewById(R.id.et_probe_set_hand); | |||
btn_probe_version.setOnClickListener(this); | |||
btn_probe_sync_time.setOnClickListener(this); | |||
btn_probe_info.setOnClickListener(this); | |||
btn_probe_set.setOnClickListener(this); | |||
btn_probe_get.setOnClickListener(this); | |||
btn_probe_unit.setOnClickListener(this); | |||
btn_probe_set_alarm.setOnClickListener(this); | |||
btn_probe_clear.setOnClickListener(this); | |||
btn_probe_clear_alarm.setOnClickListener(this); | |||
btn_probe_set_hand.setOnClickListener(this); | |||
tv_version = findViewById(R.id.tv_probe_version); | |||
tv_other = findViewById(R.id.tv_probe_other); | |||
et_probe_set_hand.setInputType(InputType.TYPE_CLASS_NUMBER); | |||
} | |||
@Override | |||
public void onClick(View view) { | |||
switch (view.getId()) { | |||
case R.id.btn_probe_version: | |||
//获取版本号 | |||
mMeatProbeChargerBleDevice.getVersion(); | |||
break; | |||
case R.id.btn_probe_sync_time: | |||
//同步时间 | |||
mMeatProbeChargerBleDevice.appSyncTime(); | |||
break; | |||
case R.id.btn_probe_info: | |||
//获取设备状态 | |||
mMeatProbeChargerBleDevice.getDeviceInfo(); | |||
break; | |||
case R.id.btn_probe_set: | |||
//设置探针参数,需要选择探针 | |||
if (mDialogMacList.size() > 0) { | |||
setProbeDataDialog(); | |||
} else { | |||
Toast.makeText(MeatProbeChargerActivity.this, "请确认充电盒当前是否有连接的探针,点击获取设备状态按钮试试", Toast.LENGTH_SHORT).show(); | |||
} | |||
break; | |||
case R.id.btn_probe_get: | |||
//获取探针参数,先判断是否有探针再选择探针获取数据,需要选择探针 | |||
if (mDialogMacList.size() > 0) { | |||
getProbeDataDialog(); | |||
} else { | |||
Toast.makeText(MeatProbeChargerActivity.this, "请确认充电盒当前是否有连接的探针,点击获取设备状态按钮试试", Toast.LENGTH_SHORT).show(); | |||
} | |||
break; | |||
case R.id.btn_probe_clear: | |||
//清除探针数据,需要选择探针 | |||
if (mDialogMacList.size() > 0) { | |||
clearProbeDataDialog(); | |||
} else { | |||
Toast.makeText(MeatProbeChargerActivity.this, "请确认充电盒当前是否有连接的探针,点击获取设备状态按钮试试", Toast.LENGTH_SHORT).show(); | |||
} | |||
break; | |||
case R.id.btn_probe_unit: | |||
//切换盒子单位 | |||
if (("切换成℃").equals(btn_probe_unit.getText().toString())) { | |||
btn_probe_unit.setText("切换成℉"); | |||
mMeatProbeChargerBleDevice.switchUnit(true); | |||
} else { | |||
btn_probe_unit.setText("切换成℃"); | |||
mMeatProbeChargerBleDevice.switchUnit(false); | |||
} | |||
break; | |||
case R.id.btn_probe_set_alarm: | |||
//发送报警设置,需要选择探针 | |||
if (mDialogMacList.size() > 0) { | |||
setAlarmDialog(); | |||
} else { | |||
Toast.makeText(MeatProbeChargerActivity.this, "请确认充电盒当前是否有连接的探针,点击获取设备状态按钮试试", Toast.LENGTH_SHORT).show(); | |||
} | |||
break; | |||
case R.id.btn_probe_clear_alarm: | |||
//清除报警设置,需要选择探针 | |||
if (mDialogMacList.size() > 0) { | |||
cancelDialog(); | |||
} else { | |||
Toast.makeText(MeatProbeChargerActivity.this, "请确认充电盒当前是否有连接的探针,点击获取设备状态按钮试试", Toast.LENGTH_SHORT).show(); | |||
} | |||
break; | |||
case R.id.btn_probe_set_hand: | |||
//发送握手命令进行握手 | |||
if (!TextUtils.isEmpty(et_probe_set_hand.getText().toString())) { | |||
String cidvidpid = et_probe_set_hand.getText().toString().replaceAll(",", ","); | |||
if (cidvidpid.contains(",")) { | |||
String[] split = cidvidpid.split(","); | |||
int cid = 0, vid = 0, pid = 0; | |||
cid = Integer.parseInt(split[0], 16); | |||
if (split.length > 1) { | |||
vid = Integer.parseInt(split[1], 16); | |||
} | |||
if (split.length > 2) { | |||
pid = Integer.parseInt(split[2], 16); | |||
} | |||
BleConfig.setHandshakeStatus(mMac, true, cid, vid, pid); | |||
} | |||
} else { | |||
Toast.makeText(MeatProbeChargerActivity.this, "请先输入CID,VID,PID", Toast.LENGTH_SHORT).show(); | |||
} | |||
break; | |||
default: | |||
break; | |||
} | |||
} | |||
/** | |||
* 取消报警 | |||
*/ | |||
private void cancelDialog() { | |||
ShowListDialogFragment.newInstance().setTitle("选择探针").setCancel("取消", 0).setCancelBlank(true).setBackground(true).setBottom(false).setList(mDialogMacList) | |||
.setOnDialogListener(new ShowListDialogFragment.onDialogListener() { | |||
@Override | |||
public void onItemListener(int position) { | |||
Toast.makeText(MeatProbeChargerActivity.this, mDialogMacList.get(position).getName() + "设置该指令", Toast.LENGTH_SHORT).show(); | |||
mMeatProbeChargerBleDevice.cancelAlarm(mDialogMacList.get(position).getName()); | |||
} | |||
}).show(getSupportFragmentManager()); | |||
} | |||
/** | |||
* 发送报警设置 | |||
*/ | |||
private void setAlarmDialog() { | |||
ShowListDialogFragment.newInstance().setTitle("选择探针").setCancel("取消", 0).setCancelBlank(true).setBackground(true).setBottom(false).setList(mDialogMacList) | |||
.setOnDialogListener(new ShowListDialogFragment.onDialogListener() { | |||
@Override | |||
public void onItemListener(int position) { | |||
Toast.makeText(MeatProbeChargerActivity.this, mDialogMacList.get(position).getName() + "设置该指令", Toast.LENGTH_SHORT).show(); | |||
mMeatProbeChargerBleDevice.setAlarmInfo(mDialogMacList.get(position).getName(), true, true, true); | |||
} | |||
}).show(getSupportFragmentManager()); | |||
} | |||
/** | |||
* 清除探针数据 | |||
*/ | |||
private void clearProbeDataDialog() { | |||
ShowListDialogFragment.newInstance().setTitle("选择探针").setCancel("取消", 0).setCancelBlank(true).setBackground(true).setBottom(false).setList(mDialogMacList) | |||
.setOnDialogListener(new ShowListDialogFragment.onDialogListener() { | |||
@Override | |||
public void onItemListener(int position) { | |||
Toast.makeText(MeatProbeChargerActivity.this, mDialogMacList.get(position).getName() + "设置该指令", Toast.LENGTH_SHORT).show(); | |||
mMeatProbeChargerBleDevice.setProbeData(0, mDialogMacList.get(position).getName()); | |||
} | |||
}).show(getSupportFragmentManager()); | |||
} | |||
/** | |||
* 获取探针数据指令 | |||
*/ | |||
private void getProbeDataDialog() { | |||
ShowListDialogFragment.newInstance().setTitle("选择探针").setCancel("取消", 0).setCancelBlank(true).setBackground(true).setBottom(false).setList(mDialogMacList) | |||
.setOnDialogListener(new ShowListDialogFragment.onDialogListener() { | |||
@Override | |||
public void onItemListener(int position) { | |||
Toast.makeText(MeatProbeChargerActivity.this, mDialogMacList.get(position).getName() + "设置该指令", Toast.LENGTH_SHORT).show(); | |||
mMeatProbeChargerBleDevice.setProbeData(2, mDialogMacList.get(position).getName()); | |||
} | |||
}).show(getSupportFragmentManager()); | |||
} | |||
/** | |||
* 设置探针数据 | |||
*/ | |||
private void setProbeDataDialog() { | |||
ShowListDialogFragment.newInstance().setTitle("选择探针").setCancel("取消", 0).setCancelBlank(true).setBackground(true).setBottom(false).setList(mDialogMacList) | |||
.setOnDialogListener(new ShowListDialogFragment.onDialogListener() { | |||
@Override | |||
public void onItemListener(int position) { | |||
Toast.makeText(MeatProbeChargerActivity.this, mDialogMacList.get(position).getName() + "设置该指令", Toast.LENGTH_SHORT).show(); | |||
mMeatProbeChargerBleDevice.setProbeData(mDialogMacList.get(position).getName(), 2, System.currentTimeMillis(), 0, 0, -15, 5, 0, 0, 0, 0, 0.8, 0, 0, 0, -15, 5); | |||
} | |||
}).show(getSupportFragmentManager()); | |||
} | |||
@Override | |||
public void onServiceSuccess() { | |||
mBleDevice = mBluetoothService.getBleDevice(mMac); | |||
if (mBleDevice != null) { | |||
if (mMeatProbeChargerBleDevice == null) { | |||
Log.e("ljl", "onServiceSuccess: 绑定设备,设置监听"); | |||
MeatProbeChargerBleDevice.init(mBleDevice); | |||
mMeatProbeChargerBleDevice = MeatProbeChargerBleDevice.getInstance(); | |||
mMeatProbeChargerBleDevice.setOnMeatProbeChargerDataListener(this); | |||
if (btn_probe_version != null) { | |||
btn_probe_version.postDelayed(new Runnable() { | |||
@Override | |||
public void run() { | |||
mBleDevice.setMtu(247); | |||
} | |||
}, 200); | |||
} | |||
} | |||
} | |||
addText("连接成功,充电盒Mac地址为:" + mMac); | |||
} | |||
@Override | |||
public void onServiceErr() { | |||
} | |||
@Override | |||
public void unbindServices() { | |||
} | |||
/** | |||
* 添加一条文本 | |||
* | |||
* @param text 文本 | |||
*/ | |||
private void addText(String text) { | |||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss", Locale.US); | |||
mList.add(sdf.format(System.currentTimeMillis()) + ":\n" + text); | |||
if (mListAdapter != null) { | |||
mListAdapter.notifyDataSetChanged(); | |||
} | |||
if (list_view != null) { | |||
list_view.smoothScrollToPosition(mList.size() - 1); | |||
} | |||
} | |||
@Override | |||
protected void onDestroy() { | |||
if (mMeatProbeChargerBleDevice != null) { | |||
mMeatProbeChargerBleDevice = null; | |||
} | |||
if (mBluetoothService != null) { | |||
mBluetoothService.disconnectAll(); | |||
} | |||
super.onDestroy(); | |||
} | |||
@Override | |||
public void setVersion() { | |||
if (mMeatProbeChargerBleDevice != null) { | |||
mMeatProbeChargerBleDevice.getVersion(); | |||
} | |||
} | |||
/** | |||
* 设置mtu成功后可以设置设备信息 | |||
*/ | |||
@Override | |||
public void setDeviceInfo() { | |||
} | |||
@Override | |||
public void onVersionInfo(String version) { | |||
tv_version.setText("固件版本号:" + version); | |||
} | |||
@Override | |||
public void appSyncTimeResult(int result) { | |||
addText("同步时间状态码:" + result); | |||
} | |||
@Override | |||
public void switchUnitResult(int result) { | |||
addText("切换单位状态码:" + result); | |||
} | |||
@Override | |||
public void setAlarmresult(String mac, int alarmResult) { | |||
addText("设置警报->探针Mac地址" + mac + " 状态码:" + alarmResult); | |||
} | |||
@Override | |||
public void cancelAlarmresult(String mac, int alarmResult) { | |||
addText("取消警报->探针Mac地址" + mac + " 状态码:" + alarmResult); | |||
} | |||
private int index = 0; | |||
@Override | |||
public void onDeviceInfo(int supportNum, int currentNum, int chargerState, int battery, int boxUnit, List<ChargerProbeBean> chargerProbeBeanList) { | |||
addText("设备支持探针数:" + supportNum + " 当前连接探针数:" + currentNum + " 充电状态:" + chargerState + " 电池电量:" + battery + " 充电盒单位:" + boxUnit); | |||
if (mChargerProbeBeanList == null) { | |||
mChargerProbeBeanList = new ArrayList<>(); | |||
mChargerProbeBeanList.addAll(chargerProbeBeanList); | |||
} else { | |||
mChargerProbeBeanList.clear(); | |||
mChargerProbeBeanList.addAll(chargerProbeBeanList); | |||
} | |||
if (mMacList.size() > 0) { | |||
mMacList.clear(); | |||
} | |||
if (mDialogMacList.size() > 0) { | |||
index = 0; | |||
mDialogMacList.clear(); | |||
} | |||
for (ChargerProbeBean chargerProbeBean : chargerProbeBeanList) { | |||
mMacList.add(chargerProbeBean.getMac()); | |||
mDialogMacList.add(new DialogStringImageAdapter.DialogStringImageBean(chargerProbeBean.getMac(), ++index)); | |||
addText("探针编号:" + chargerProbeBean.getNum() + " 探针mac地址:" + chargerProbeBean.getMac() + " 食物温度单位: " + chargerProbeBean.getFoodUnit() + " 正负: " + chargerProbeBean.getFoodPositive() + " " + "温度绝对值: " + chargerProbeBean.getFoodTemp() + " 环境温度单位: " + chargerProbeBean.getAmbientUnit() + " 正负: " + chargerProbeBean.getAmbientPositive() + " 温度绝对值: " + chargerProbeBean.getAmbientTemp() + " 探针充电状态:" + chargerProbeBean.getChargerState() + " 电量: " + chargerProbeBean.getBattery() + " 插入食物状态: " + chargerProbeBean.getInsertState()); | |||
} | |||
} | |||
@Override | |||
public void onNoDeviceInfo(int supportNum, int currentNum, int chargingState, int battery, int boxUnit) { | |||
addText("设备支持探针数:" + supportNum + " 当前连接探针数:" + currentNum + " 充电状态:" + chargingState + " 电池电量:" + battery + " 充电盒单位:" + boxUnit); | |||
} | |||
@Override | |||
public void onBatteryStatus(int status, int battery) { | |||
if (btn_probe_version != null) { | |||
btn_probe_version.postDelayed(new Runnable() { | |||
@Override | |||
public void run() { | |||
if (mBleDevice != null) { | |||
mBleDevice.setMtu(247); | |||
} | |||
} | |||
}, 200); | |||
} | |||
} | |||
@Override | |||
public void onOtherData(String hexStr) { | |||
//其他数据 | |||
addText("其他数据:[" + hexStr + "]"); | |||
} | |||
@Override | |||
public void onDataStrA6(String hexStrA6) { | |||
addText("收到A6数据:[" + hexStrA6 + "]"); | |||
} | |||
@Override | |||
public void onDataStrA7(String hexStrA7) { | |||
addText("收到A7数据:[" + hexStrA7 + "]"); | |||
} | |||
@Override | |||
public void sendDataA6(String hexStrA6) { | |||
addText("发送A6数据:[" + hexStrA6 + "]"); | |||
} | |||
@Override | |||
public void sendDataA7(String hexStrA7) { | |||
addText("发送A7数据:[" + hexStrA7 + "]"); | |||
} | |||
@Override | |||
public void onHand(boolean status) { | |||
addText("握手" + (status ? "成功" : "失败")); | |||
if (!status) { | |||
Toast.makeText(MeatProbeChargerActivity.this, "握手失败,请退出界面重新搜索蓝牙连接设备", Toast.LENGTH_SHORT).show(); | |||
} | |||
} | |||
} |
@@ -8,6 +8,7 @@ import android.widget.CompoundButton; | |||
import android.widget.ListView; | |||
import android.widget.RadioButton; | |||
import com.pingwang.bluetoothlib.bean.SupportUnitBean; | |||
import com.pingwang.bluetoothlib.device.BleDevice; | |||
import java.text.SimpleDateFormat; | |||
@@ -228,6 +229,11 @@ public class WeightScaleActivity extends BleBaseActivity implements WeightScaleD | |||
addText("收到的A7 PayLoad:[" + A7DataStr + "]"); | |||
} | |||
@Override | |||
public void onSupportUnit(List<SupportUnitBean> list) { | |||
} | |||
@Override | |||
public void onMeasureOk() { | |||
addText("测量完成"); | |||
@@ -283,7 +289,7 @@ public class WeightScaleActivity extends BleBaseActivity implements WeightScaleD | |||
* | |||
* @param quest 1-请求同步时间 | |||
*/ | |||
@Override | |||
public void onSyncTime(int quest) { | |||
if (quest == 1) { | |||
if (mWeightScaleDevice != null) { |
@@ -57,6 +57,16 @@ | |||
android:layout_height="wrap_content" | |||
android:text="广播体重秤"/> | |||
<Button | |||
android:id="@+id/btn_meat_probe" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="食物探针"/> | |||
<Button | |||
android:id="@+id/btn_meat_probe_charger" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="探针充电盒" /> | |||
</LinearLayout> | |||
@@ -137,7 +147,7 @@ | |||
android:id="@+id/btn_broadcast_scale" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="广播体脂秤" /> | |||
android:text="广播秤" /> | |||
<Button | |||
android:id="@+id/btn_broadcast_blood_oxygen" | |||
@@ -432,12 +442,8 @@ | |||
android:id="@+id/btn_leap_watch" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="芯一代手表" /> | |||
<Button | |||
android:id="@+id/btn_meat_probe_charger" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="食物探针充电盒" /> | |||
android:text="运动手表" /> | |||
</LinearLayout> | |||
<LinearLayout | |||
@@ -480,7 +486,7 @@ | |||
android:id="@+id/btn_weight_scale" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="连接体重秤"/> | |||
android:text="体重秤"/> | |||
</LinearLayout> | |||
@@ -0,0 +1,201 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||
xmlns:app="http://schemas.android.com/apk/res-auto" | |||
android:layout_width="match_parent" | |||
android:layout_height="match_parent" | |||
android:orientation="vertical"> | |||
<LinearLayout | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:orientation="horizontal"> | |||
<Button | |||
android:id="@+id/btn_meat_probe_connect" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="连接" /> | |||
<Button | |||
android:id="@+id/btn_meat_probe_disconnect" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="断开连接" /> | |||
</LinearLayout> | |||
<LinearLayout | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:orientation="horizontal"> | |||
<Button | |||
android:id="@+id/btn_meat_probe_version" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="读取版本号" /> | |||
<Button | |||
android:id="@+id/btn_meat_probe_battery" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="读取电量" /> | |||
<Button | |||
android:id="@+id/btn_meat_probe_switch_unit" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="单位切换" /> | |||
<Button | |||
android:id="@+id/btn_meat_probe_get_info" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="获取设备信息" /> | |||
</LinearLayout> | |||
<LinearLayout | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:orientation="horizontal"> | |||
<Button | |||
android:id="@+id/btn_meat_probe_start" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="开始工作(设置食物信息)" /> | |||
<Button | |||
android:id="@+id/btn_meat_probe_end" | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="结束工作(清除食物信息)" /> | |||
</LinearLayout> | |||
<LinearLayout | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:layout_marginStart="20dp" | |||
android:layout_marginEnd="20dp" | |||
android:paddingBottom="10dp" | |||
android:orientation="horizontal"> | |||
<TextView | |||
android:layout_width="wrap_content" | |||
android:layout_height="wrap_content" | |||
android:text="食物信息默认为--食物类型0,食物熟度2,目标温度65(℃),环境温度范围0~100(℃),提醒温度52(℃),提醒温度百分比0.8" /> | |||
</LinearLayout> | |||
<LinearLayout | |||
android:layout_width="match_parent" | |||
android:layout_height="30dp" | |||
android:layout_marginStart="20dp" | |||
android:layout_marginEnd="20dp" | |||
android:gravity="center_vertical" | |||
android:orientation="horizontal"> | |||
<TextView | |||
android:id="@+id/tv_meat_probe_ambient" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:layout_weight="1" | |||
android:textColor="@color/black" | |||
android:text="环境温度:--" /> | |||
<TextView | |||
android:id="@+id/tv_meat_probe_internal" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:layout_weight="1" | |||
android:textColor="@color/black" | |||
android:text="食物温度:--" /> | |||
<TextView | |||
android:id="@+id/tv_meat_probe_target" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:layout_weight="1" | |||
android:textColor="@color/black" | |||
android:text="目标温度:--" /> | |||
</LinearLayout> | |||
<LinearLayout | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:paddingTop="5dp" | |||
android:paddingBottom="5dp" | |||
android:layout_marginStart="20dp" | |||
android:layout_marginEnd="20dp" | |||
android:gravity="center_vertical" | |||
android:orientation="horizontal"> | |||
<TextView | |||
android:id="@+id/tv_meat_probe_ambient_unit" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:layout_weight="1" | |||
android:textColor="@color/black" | |||
android:text="环境温度单位:--" /> | |||
<TextView | |||
android:id="@+id/tv_meat_probe_internal_unit" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:layout_weight="1" | |||
android:textColor="@color/black" | |||
android:text="食物温度单位:--" /> | |||
<TextView | |||
android:id="@+id/tv_meat_probe_target_unit" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:layout_weight="1" | |||
android:textColor="@color/black" | |||
android:text="目标温度单位:--" /> | |||
</LinearLayout> | |||
<LinearLayout | |||
android:layout_width="match_parent" | |||
android:layout_height="wrap_content" | |||
android:layout_marginStart="20dp" | |||
android:layout_marginEnd="20dp" | |||
android:layout_marginTop="5dp" | |||
android:orientation="horizontal"> | |||
<TextView | |||
android:id="@+id/tv_meat_probe_battery" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:layout_weight="1" | |||
android:textColor="@color/black" | |||
android:text="当前电量:--" /> | |||
<TextView | |||
android:id="@+id/tv_meat_probe_version" | |||
android:layout_width="0dp" | |||
android:layout_height="wrap_content" | |||
android:layout_weight="3" | |||
android:textColor="@color/black" | |||
android:text="模块版本号:--" /> | |||
</LinearLayout> | |||
<View | |||
android:layout_width="match_parent" | |||
android:layout_height="1dp" | |||
android:layout_marginTop="20dp" | |||
android:background="?android:attr/listDivider" /> | |||
<ListView | |||
android:id="@+id/list_view_meat_probe" | |||
android:layout_width="match_parent" | |||
android:layout_height="0dp" | |||
android:layout_weight="1" /> | |||
</LinearLayout> |
@@ -5,4 +5,6 @@ | |||
<color name="colorAccent">#D81B60</color> | |||
<color name="public_white">#FFFFFF</color> | |||
<color name="public_press_bg">#dcdcdc</color> | |||
<color name="white">#FFFFFF</color> | |||
<color name="black">#000000</color> | |||
</resources> |