Selaa lähdekoodia

增加食物探针和探针充电盒

master
liujilai@elinkthings.com 1 vuosi sitten
vanhempi
commit
321075a4f3
17 muutettua tiedostoa jossa 1456 lisäystä ja 88 poistoa
  1. 4
    4
      app/build.gradle
  2. 7
    6
      app/src/main/AndroidManifest.xml
  3. 98
    19
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/MainActivity.java
  4. 24
    20
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ShowBleActivity.java
  5. 6
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/config/BleDeviceConfig.java
  6. 4
    2
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector/AirDetectorActivity.java
  7. 36
    3
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector/AirUtil.java
  8. 60
    17
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector_test/AirDetectorActivityTest.java
  9. 30
    8
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector_test/AirDetectorTestShowUtil.java
  10. 7
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector_test/SettingResultInterface.java
  11. 164
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/meat_probe/FoodConfig.java
  12. 340
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/meat_probe/MeatProbeActivity.java
  13. 452
    0
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/meat_probe_charger/MeatProbeChargerActivity.java
  14. 7
    1
      app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/weight_scale/WeightScaleActivity.java
  15. 14
    8
      app/src/main/res/layout/activity_main.xml
  16. 201
    0
      app/src/main/res/layout/activity_meat_probe.xml
  17. 2
    0
      app/src/main/res/values/colors.xml

+ 4
- 4
app/build.gradle Näytä tiedosto

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

+ 7
- 6
app/src/main/AndroidManifest.xml Näytä tiedosto

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

+ 98
- 19
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/MainActivity.java Näytä tiedosto

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

+ 24
- 20
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/ShowBleActivity.java Näytä tiedosto

@@ -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) {

+ 6
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/config/BleDeviceConfig.java Näytä tiedosto

@@ -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;
}


+ 4
- 2
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector/AirDetectorActivity.java Näytä tiedosto

@@ -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());

+ 36
- 3
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector/AirUtil.java Näytä tiedosto

@@ -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 "未知";
}
}

+ 60
- 17
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector_test/AirDetectorActivityTest.java Näytä tiedosto

@@ -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) {

+ 30
- 8
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector_test/AirDetectorTestShowUtil.java Näytä tiedosto

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

+ 7
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/airdetector_test/SettingResultInterface.java Näytä tiedosto

@@ -113,6 +113,13 @@ public interface SettingResultInterface {
* @param content
*/
public void onResultDataDisplayMode(String content);

/**
* 报警总开关设置
* @param content
*/
public void onResultMasterWarnSwitch(String content);

/**
* 甲醛校准
* @param content

+ 164
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/meat_probe/FoodConfig.java Näytä tiedosto

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

}



+ 340
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/meat_probe/MeatProbeActivity.java Näytä tiedosto

@@ -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) + "]");
}
}

+ 452
- 0
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/meat_probe_charger/MeatProbeChargerActivity.java Näytä tiedosto

@@ -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();
}
}
}

+ 7
- 1
app/src/main/java/aicare/net/cn/sdk/ailinksdkdemoandroid/modules/weight_scale/WeightScaleActivity.java Näytä tiedosto

@@ -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) {

+ 14
- 8
app/src/main/res/layout/activity_main.xml Näytä tiedosto

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


+ 201
- 0
app/src/main/res/layout/activity_meat_probe.xml Näytä tiedosto

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

+ 2
- 0
app/src/main/res/values/colors.xml Näytä tiedosto

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

Loading…
Peruuta
Tallenna