applicationId "aicare.net.cn.sdk.ailinksdkdemoandroid" | applicationId "aicare.net.cn.sdk.ailinksdkdemoandroid" | ||||
minSdkVersion 19 | minSdkVersion 19 | ||||
targetSdkVersion 31 | targetSdkVersion 31 | ||||
versionCode 17 | |||||
versionName "1.10.59" | |||||
versionCode 18 | |||||
versionName "1.10.60" | |||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||||
} | } | ||||
buildTypes { | buildTypes { | ||||
implementation 'androidx.appcompat:appcompat:1.4.2' | implementation 'androidx.appcompat:appcompat:1.4.2' | ||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.4' | implementation 'androidx.constraintlayout:constraintlayout:2.0.4' | ||||
testImplementation 'junit:junit:4.12' | 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: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 'androidx.recyclerview:recyclerview:1.2.1' | ||||
implementation 'com.jakewharton:butterknife:10.2.0' | implementation 'com.jakewharton:butterknife:10.2.0' | ||||
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' | annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' |
<!--兼容6.0以上的手机Ble--> | <!--兼容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 | <uses-permission | ||||
android:name="android.permission.BLUETOOTH" | android:name="android.permission.BLUETOOTH" | ||||
android:theme="@style/AppTheme" | android:theme="@style/AppTheme" | ||||
android:usesCleartextTraffic="true" | android:usesCleartextTraffic="true" | ||||
tools:targetApi="q"> | tools:targetApi="q"> | ||||
<activity android:name=".MainActivity" | |||||
<activity | |||||
android:name=".MainActivity" | |||||
android:exported="true"> | android:exported="true"> | ||||
<intent-filter> | <intent-filter> | ||||
<action android:name="android.intent.action.VIEW" /> | <action android:name="android.intent.action.VIEW" /> | ||||
<activity android:name=".PublicBleNetworkCmdActivity" /> | <activity android:name=".PublicBleNetworkCmdActivity" /> | ||||
<activity android:name=".modules.noise_meter.WifiBleNoiseMeterActivity" /> | <activity android:name=".modules.noise_meter.WifiBleNoiseMeterActivity" /> | ||||
<activity android:name=".modules.noise_meter.BleNoiseMeterActivity" /> | <activity android:name=".modules.noise_meter.BleNoiseMeterActivity" /> | ||||
<activity android:name=".modules.meat_probe_charger.MeatProbeChargerActivity" /> | |||||
<activity android:name=".modules.meat_probe.MeatProbeActivity" /> | |||||
<activity | <activity | ||||
android:name=".modules.weight_scale.WeightScaleActivity" | android:name=".modules.weight_scale.WeightScaleActivity" | ||||
android:name="android.support.FILE_PROVIDER_PATHS" | android:name="android.support.FILE_PROVIDER_PATHS" | ||||
android:resource="@xml/file_paths" /> | android:resource="@xml/file_paths" /> | ||||
</provider> | </provider> | ||||
<service android:name="com.pingwang.bluetoothlib.server.ELinkBleServer"/> | |||||
<service android:name="com.pingwang.bluetoothlib.server.ELinkBleServer" /> | |||||
</application> | </application> | ||||
</manifest> | </manifest> |
import android.widget.TextView; | import android.widget.TextView; | ||||
import com.besthealth.bhBodyComposition120.BhBodyComposition; | import com.besthealth.bhBodyComposition120.BhBodyComposition; | ||||
import com.pingwang.bluetoothlib.AILinkBleManager; | |||||
import com.pingwang.bluetoothlib.AILinkSDK; | import com.pingwang.bluetoothlib.AILinkSDK; | ||||
import com.pingwang.bluetoothlib.utils.BleLog; | import com.pingwang.bluetoothlib.utils.BleLog; | ||||
public class MainActivity extends AppCompatActivity { | public class MainActivity extends AppCompatActivity { | ||||
private static String TAG = MainActivity.class.getName(); | private static String TAG = MainActivity.class.getName(); | ||||
private List<View> mList = new ArrayList<>(); | private List<View> mList = new ArrayList<>(); | ||||
private Context mContext; | private Context mContext; | ||||
initView(); | initView(); | ||||
initData(); | initData(); | ||||
initListener(); | 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); | |||||
} | } | ||||
String version = getString(R.string.version) + ":" + BuildConfig.VERSION_NAME; | String version = getString(R.string.version) + ":" + BuildConfig.VERSION_NAME; | ||||
((TextView) findViewById(R.id.tv_app_version)).setText(version); | ((TextView) findViewById(R.id.tv_app_version)).setText(version); | ||||
ActionBar supportActionBar = getSupportActionBar(); | ActionBar supportActionBar = getSupportActionBar(); | ||||
if (supportActionBar != null) { | |||||
if (supportActionBar != null) | |||||
supportActionBar.setTitle(getString(R.string.app_name) + BuildConfig.VERSION_NAME); | supportActionBar.setTitle(getString(R.string.app_name) + BuildConfig.VERSION_NAME); | ||||
} | |||||
findViewById(R.id.btn_about).setOnClickListener(new View.OnClickListener() { | findViewById(R.id.btn_about).setOnClickListener(new View.OnClickListener() { | ||||
@Override | @Override | ||||
public void onClick(View v) { | public void onClick(View v) { | ||||
startActivity(new Intent(mContext, AboutActivity.class)); | 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(); | 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_sphy)); | ||||
mList.add(findViewById(R.id.btn_tempgun)); | mList.add(findViewById(R.id.btn_tempgun)); | ||||
mList.add(findViewById(R.id.btn_temp)); | mList.add(findViewById(R.id.btn_temp)); | ||||
mList.add(findViewById(R.id.btn_baby)); | mList.add(findViewById(R.id.btn_baby)); | ||||
mList.add(findViewById(R.id.btn_height)); | mList.add(findViewById(R.id.btn_height)); | ||||
mList.add(findViewById(R.id.btn_ble)); | 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.btn_ble_test)); | ||||
mList.add(findViewById(R.id.btnConnectTest)); | mList.add(findViewById(R.id.btnConnectTest)); | ||||
mList.add(findViewById(R.id.btn_ad_weight)); | mList.add(findViewById(R.id.btn_ad_weight)); | ||||
mList.add(findViewById(R.id.btn_meat_probe_charger)); | mList.add(findViewById(R.id.btn_meat_probe_charger)); | ||||
mList.add(findViewById(R.id.btn_weight_scale)); | mList.add(findViewById(R.id.btn_weight_scale)); | ||||
mList.add(findViewById(R.id.btn_broadcast_scale_weight)); | mList.add(findViewById(R.id.btn_broadcast_scale_weight)); | ||||
mList.add(findViewById(R.id.btn_meat_probe)); | |||||
for (View view : mList) { | for (View view : mList) { | ||||
view.setOnClickListener(listener); | view.setOnClickListener(listener); | ||||
} | } | ||||
public void onClick(View v) { | public void onClick(View v) { | ||||
startActivity(new Intent(mContext, RopeSkippingSetActivity.class)); | 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); | |||||
} | } | ||||
}); | }); | ||||
} | } | ||||
protected void initView() { | protected void initView() { | ||||
BleLog.init("", "", true); | |||||
BleLog.init(true); | |||||
//connectDevice(BleValueBean bleValueBean);连接的时候需要传广播对象,否则返回的cid,vid,pid始终都是0 | //connectDevice(BleValueBean bleValueBean);连接的时候需要传广播对象,否则返回的cid,vid,pid始终都是0 | ||||
//每次连接之前都要设置一次,设置一次之后就一直有效 | |||||
//sdk | //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); | SP.init(this); | ||||
} | } | ||||
//体重秤 | //体重秤 | ||||
type = BleDeviceConfig.WEIGHT_SCALE; | type = BleDeviceConfig.WEIGHT_SCALE; | ||||
break; | break; | ||||
case R.id.btn_meat_probe: | |||||
// 食物探针 | |||||
type = BleDeviceConfig.MEAT_PROBE; | |||||
break; | |||||
case R.id.btn_mqtt: | case R.id.btn_mqtt: | ||||
return; | return; | ||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults); | super.onRequestPermissionsResult(requestCode, permissions, grantResults); | ||||
//请求权限被拒绝 | //请求权限被拒绝 | ||||
if (requestCode != PERMISSION) { | |||||
if (requestCode != PERMISSION) | |||||
return; | return; | ||||
} | |||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { | if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { | ||||
initPermissions(); | initPermissions(); | ||||
} else { | } else { |
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.coffee_scale.CoffeeScaleActivity; | 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.fascia_gun.FasciaGunActivity; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.food_temp.FoodTempActivity; | 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.BleNoiseMeterActivity; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.noise_meter.WifiBleNoiseMeterActivity; | import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.noise_meter.WifiBleNoiseMeterActivity; | ||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.share_charger.ShareChargerActivity; | import aicare.net.cn.sdk.ailinksdkdemoandroid.modules.share_charger.ShareChargerActivity; | ||||
super.onCreate(savedInstanceState); | super.onCreate(savedInstanceState); | ||||
setContentView(R.layout.activity_show_ble); | setContentView(R.layout.activity_show_ble); | ||||
ActionBar supportActionBar = getSupportActionBar(); | ActionBar supportActionBar = getSupportActionBar(); | ||||
if (supportActionBar != null) { | |||||
if (supportActionBar != null) | |||||
supportActionBar.setTitle(getString(R.string.app_name) + BuildConfig.VERSION_NAME); | supportActionBar.setTitle(getString(R.string.app_name) + BuildConfig.VERSION_NAME); | ||||
} | |||||
Intent mUserService = new Intent(this.getApplicationContext(), ELinkBleServer.class); | Intent mUserService = new Intent(this.getApplicationContext(), ELinkBleServer.class); | ||||
//核心用户服务 | //核心用户服务 | ||||
startService(mUserService); | startService(mUserService); | ||||
//要加密要握手。别人家的东西 | //要加密要握手。别人家的东西 | ||||
if (mVid == 0x0027 && mPid == 0x0001) { | if (mVid == 0x0027 && mPid == 0x0001) { | ||||
BleConfig.setHandshakeStatus(RopeSkippingBleData.LongXiang, mac, true); | 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) { | } else if (mCid == BleDeviceConfig.LEAP_WATCH) { | ||||
// 手表不握手 | // 手表不握手 | ||||
BleConfig.setHandshakeStatus(mac, false); | BleConfig.setHandshakeStatus(mac, false); | ||||
} else if (mCid == BleDeviceConfig.MEAT_PROBE_CHARGER) { | |||||
//探针充电盒握手 | |||||
BleConfig.setHandshakeStatus(mac, true, mCid, mVid, mPid); | |||||
mNoEncryptionMac = mac; | |||||
} | } | ||||
if (mBluetoothService != null) { | if (mBluetoothService != null) { | ||||
mBluetoothService.stopScan(); | mBluetoothService.stopScan(); | ||||
public void onScanning(@NonNull BleValueBean data) { | public void onScanning(@NonNull BleValueBean data) { | ||||
String mAddress = data.getMac(); | String mAddress = data.getMac(); | ||||
BleLog.i(TAG, "MAC=" + mAddress + "||CID=" + data.getCid() + "||VID=" + data.getVid() + "||PID=" + data.getPid()); | BleLog.i(TAG, "MAC=" + mAddress + "||CID=" + data.getCid() + "||VID=" + data.getVid() + "||PID=" + data.getPid()); | ||||
boolean oldData = false; | boolean oldData = false; | ||||
for (int i = 0; i < mBleValueList.size(); i++) { | for (int i = 0; i < mBleValueList.size(); i++) { | ||||
BleValueBean bleValueBean = mBleValueList.get(i); | BleValueBean bleValueBean = mBleValueList.get(i); | ||||
bleDevice.setA7Encryption(false); | bleDevice.setA7Encryption(false); | ||||
mNoEncryptionMac = ""; | mNoEncryptionMac = ""; | ||||
} | } | ||||
dismissLoading(); | dismissLoading(); | ||||
Intent intent = new Intent(); | Intent intent = new Intent(); | ||||
int type = mType;//默认婴儿秤 | int type = mType;//默认婴儿秤 | ||||
switch (type) { | switch (type) { | ||||
case BleDeviceConfig.BABY_SCALE: | case BleDeviceConfig.BABY_SCALE: | ||||
//婴儿秤 | |||||
intent.setClass(ShowBleActivity.this, BabyCmdActivity.class); | intent.setClass(ShowBleActivity.this, BabyCmdActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.INFRARED_THERMOMETER: | case BleDeviceConfig.INFRARED_THERMOMETER: | ||||
//额温枪 | |||||
intent.setClass(ShowBleActivity.this, TempGunCmdActivity.class); | intent.setClass(ShowBleActivity.this, TempGunCmdActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.BLOOD_PRESSURE: | case BleDeviceConfig.BLOOD_PRESSURE: | ||||
case BleDeviceConfig.SPHY_WIFI_BLE: | case BleDeviceConfig.SPHY_WIFI_BLE: | ||||
//血压计 | |||||
intent.setClass(ShowBleActivity.this, SphyCmdActivity.class); | intent.setClass(ShowBleActivity.this, SphyCmdActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.THERMOMETER: | case BleDeviceConfig.THERMOMETER: | ||||
//体温计 | |||||
intent.setClass(ShowBleActivity.this, TempCmdActivity.class); | intent.setClass(ShowBleActivity.this, TempCmdActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.HEIGHT_METER: | case BleDeviceConfig.HEIGHT_METER: | ||||
//身高仪 | |||||
intent.setClass(ShowBleActivity.this, HeightCmdActivity.class); | intent.setClass(ShowBleActivity.this, HeightCmdActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE: | case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE: | ||||
//体重体脂称 | |||||
intent.setClass(ShowBleActivity.this, WeightScaleBleActivity.class); | intent.setClass(ShowBleActivity.this, WeightScaleBleActivity.class); | ||||
break; | break; | ||||
// case BleDeviceConfig.SMART_LOCK: | |||||
// intent.setClass(ShowBleActivity.this, LockCmdActivity.class); | |||||
// break; | |||||
case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_AD: | case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_AD: | ||||
//体重体脂称 | |||||
intent.setClass(ShowBleActivity.this, ADWeightScaleCmdActivity.class); | intent.setClass(ShowBleActivity.this, ADWeightScaleCmdActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_WIFI_BLE: | case BleDeviceConfig.WEIGHT_BODY_FAT_SCALE_WIFI_BLE: | ||||
break; | break; | ||||
case BleDeviceConfig.FIND_DEVICE: | case BleDeviceConfig.FIND_DEVICE: | ||||
// 寻物器 | // 寻物器 | ||||
// intent.setClass(ShowBleActivity.this, FindDeviceActivity.class); | |||||
intent.setClass(ShowBleActivity.this, FindDeviceNewActivity.class); | intent.setClass(ShowBleActivity.this, FindDeviceNewActivity.class); | ||||
BleConfig.setHandshakeStatus(mac, false); | BleConfig.setHandshakeStatus(mac, false); | ||||
break; | break; | ||||
intent.setClass(ShowBleActivity.this, FoodTempActivity.class); | intent.setClass(ShowBleActivity.this, FoodTempActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.HEIGHT_BODY_FAT: | case BleDeviceConfig.HEIGHT_BODY_FAT: | ||||
//身高体脂秤 | |||||
intent.setClass(ShowBleActivity.this, HeightWeightScaleActivity.class); | intent.setClass(ShowBleActivity.this, HeightWeightScaleActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.TEMP_Humidity: | case BleDeviceConfig.TEMP_Humidity: | ||||
case BleDeviceConfig.BLE_NOISE_METER: | case BleDeviceConfig.BLE_NOISE_METER: | ||||
intent.setClass(ShowBleActivity.this, BleNoiseMeterActivity.class); | intent.setClass(ShowBleActivity.this, BleNoiseMeterActivity.class); | ||||
break; | break; | ||||
//探针充电盒 | |||||
case BleDeviceConfig.MEAT_PROBE_CHARGER: | |||||
intent.setClass(ShowBleActivity.this, MeatProbeChargerActivity.class); | |||||
break; | |||||
//体脂秤 | //体脂秤 | ||||
case BleDeviceConfig.WEIGHT_SCALE: | case BleDeviceConfig.WEIGHT_SCALE: | ||||
intent.setClass(ShowBleActivity.this, WeightScaleActivity.class); | intent.setClass(ShowBleActivity.this, WeightScaleActivity.class); | ||||
//验证不握手不加密的界面 | //验证不握手不加密的界面 | ||||
intent.setClass(ShowBleActivity.this, ClearShakeHandsActivity.class); | intent.setClass(ShowBleActivity.this, ClearShakeHandsActivity.class); | ||||
break; | break; | ||||
//食物探针 | |||||
case BleDeviceConfig.MEAT_PROBE: | |||||
intent.setClass(ShowBleActivity.this, MeatProbeActivity.class); | |||||
break; | |||||
default: | default: | ||||
} | } | ||||
/** | |||||
* 检查设备 | |||||
* | |||||
* @param scanCid 扫描cid | |||||
* @param cid cid | |||||
* @param nameAndMac 名字和mac过滤 | |||||
* @return boolean | |||||
*/ | |||||
private boolean isCheckDevice(int scanCid, int cid, boolean nameAndMac) { | private boolean isCheckDevice(int scanCid, int cid, boolean nameAndMac) { | ||||
boolean okDevice = false; | boolean okDevice = false; | ||||
if (scanCid == BleDeviceConfig.BLOOD_PRESSURE) { | if (scanCid == BleDeviceConfig.BLOOD_PRESSURE) { |
package aicare.net.cn.sdk.ailinksdkdemoandroid.config; | package aicare.net.cn.sdk.ailinksdkdemoandroid.config; | ||||
/** | /** | ||||
* xing<br> | * xing<br> | ||||
* 2019/3/5<br> | * 2019/3/5<br> | ||||
*/ | */ | ||||
public final static int WEIGHT_SCALE = 0X0056; | public final static int WEIGHT_SCALE = 0X0056; | ||||
/** | |||||
* 食物探针 | |||||
*/ | |||||
public final static int MEAT_PROBE = 0X003F; | |||||
//------------------特殊 | //------------------特殊 | ||||
*/ | */ | ||||
public final static int PUBLIC_BLE_NETWORK = -7; | public final static int PUBLIC_BLE_NETWORK = -7; | ||||
} | } | ||||
String valueMin = ed_min.getText().toString().trim(); | String valueMin = ed_min.getText().toString().trim(); | ||||
float myValueMax = valueMax.contains("\\.") ? Float.parseFloat(valueMax) : Integer.parseInt(valueMax); | float myValueMax = valueMax.contains("\\.") ? Float.parseFloat(valueMax) : Integer.parseInt(valueMax); | ||||
float myValueMin = valueMin.contains("\\.") ? Float.parseFloat(valueMin) : Integer.parseInt(valueMin); | 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(), | sendDataBean = AirSendUtil.setWarmTemp(supportBean.getPoint(), | ||||
supportBean.getUnit(), myValueMax, myValueMin); | |||||
supportBean.getUnit(), myValueMax, myValueMin, warmStateTemp); | |||||
break; | break; | ||||
case AirConst.AIR_TYPE_HUMIDITY: | case AirConst.AIR_TYPE_HUMIDITY: | ||||
valueMax = ed_max.getText().toString().trim(); | valueMax = ed_max.getText().toString().trim(); | ||||
valueMin = ed_min.getText().toString().trim(); | valueMin = ed_min.getText().toString().trim(); | ||||
myValueMax = valueMax.contains("\\.") ? Float.parseFloat(valueMax) : Integer.parseInt(valueMax); | myValueMax = valueMax.contains("\\.") ? Float.parseFloat(valueMax) : Integer.parseInt(valueMax); | ||||
myValueMin = valueMin.contains("\\.") ? Float.parseFloat(valueMin) : Integer.parseInt(valueMin); | myValueMin = valueMin.contains("\\.") ? Float.parseFloat(valueMin) : Integer.parseInt(valueMin); | ||||
int warmStateHumi = Integer.parseInt(ed_warm_state.getText().toString().trim()); | |||||
sendDataBean = AirSendUtil.setWarmHumidity(supportBean.getPoint(), | sendDataBean = AirSendUtil.setWarmHumidity(supportBean.getPoint(), | ||||
myValueMax, myValueMin); | |||||
myValueMax, myValueMin, warmStateHumi); | |||||
break; | break; | ||||
case AirConst.AIR_SETTING_VOICE: | case AirConst.AIR_SETTING_VOICE: | ||||
warmState = Integer.parseInt(ed_warm_state.getText().toString().trim()); | warmState = Integer.parseInt(ed_warm_state.getText().toString().trim()); |
typeNameArray.append(AirConst.AIR_ICON_DISPLAY, "图标显示"); | typeNameArray.append(AirConst.AIR_ICON_DISPLAY, "图标显示"); | ||||
typeNameArray.append(AirConst.AIR_MONITORING_DISPLAY_DATA, "监控显示数据"); | typeNameArray.append(AirConst.AIR_MONITORING_DISPLAY_DATA, "监控显示数据"); | ||||
typeNameArray.append(AirConst.AIR_DATA_DISPLAY_MODE, "数据显示模式"); | typeNameArray.append(AirConst.AIR_DATA_DISPLAY_MODE, "数据显示模式"); | ||||
typeNameArray.append(AirConst.AIR_PROTOCOL_VERSION, "协议版本"); | |||||
} | } | ||||
} | } | ||||
StringBuilder builder = new StringBuilder(); | StringBuilder builder = new StringBuilder(); | ||||
for (AlarmClockInfoList.AlarmInfo bean : list) { | 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.isDeleted()); | ||||
builder.append(", 编号:").append(bean.getId()); | |||||
builder.append(", 模式:").append(bean.getMode()); | 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(", 闹钟周期:").append(dealAlarmDay(bean.getAlarmDays())); | ||||
builder.append("\n"); | builder.append("\n"); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
private static String dealTime(int num){ | |||||
if (num < 10) { | |||||
return "0" + num; | |||||
} | |||||
return num + ""; | |||||
} | |||||
private static String dealAlarmDay(int[] days){ | private static String dealAlarmDay(int[] days){ | ||||
if (days == null) { | if (days == null) { | ||||
return ""; | return ""; | ||||
builder.append("]"); | builder.append("]"); | ||||
return builder.toString(); | 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 "未知"; | |||||
} | |||||
} | } |
import androidx.lifecycle.Lifecycle; | import androidx.lifecycle.Lifecycle; | ||||
import androidx.recyclerview.widget.LinearLayoutManager; | import androidx.recyclerview.widget.LinearLayoutManager; | ||||
import androidx.recyclerview.widget.RecyclerView; | 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.AirConst; | ||||
import cn.net.aicare.modulelibrary.module.airDetector.AirDetectorWifeBleData; | import cn.net.aicare.modulelibrary.module.airDetector.AirDetectorWifeBleData; | ||||
import cn.net.aicare.modulelibrary.module.airDetector.AirSendUtil; | 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.StatusBean; | ||||
import cn.net.aicare.modulelibrary.module.airDetector.SupportBean; | import cn.net.aicare.modulelibrary.module.airDetector.SupportBean; | ||||
private static final int STEP_CAL_TVOC = 36; // TVOC校准 | private static final int STEP_CAL_TVOC = 36; // TVOC校准 | ||||
private static final int STEP_CAL_CO = 37; // CO校准 | private static final int STEP_CAL_CO = 37; // CO校准 | ||||
private static final int STEP_SETTING_ALARM = 38; // 闹钟 | 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_SELF_TEST = 18; // 设备自检 | ||||
// private static final int STEP_DEVICE_BIND = 18; // 设备绑定 | // private static final int STEP_DEVICE_BIND = 18; // 设备绑定 | ||||
// private static final int STEP_RESTORE_FACTORY_SETTINGS = 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_NULL = 0; | ||||
private static final int RESULT_SUCCESS = 1; | private static final int RESULT_SUCCESS = 1; | ||||
public void onStatusList(SparseArray<StatusBean> statusList) { | public void onStatusList(SparseArray<StatusBean> statusList) { | ||||
if (mStep == STEP_REALTIME_STATUS) { | if (mStep == STEP_REALTIME_STATUS) { | ||||
stepSuccess(AirDetectorTestShowUtil.showTextStatus(statusList, deviceSupportList)); | 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)); | |||||
} | |||||
} | } | ||||
} | } | ||||
type = AirConst.AIR_TYPE_FORMALDEHYDE; | type = AirConst.AIR_TYPE_FORMALDEHYDE; | ||||
if (isSupportWarmType(type)) { | if (isSupportWarmType(type)) { | ||||
addTest("设置甲醛报警"); | 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; | break; | ||||
case STEP_WARM_TEMP: | case STEP_WARM_TEMP: | ||||
type = AirConst.AIR_TYPE_TEMP; | type = AirConst.AIR_TYPE_TEMP; | ||||
if (isSupportWarmType(type)) { | if (isSupportWarmType(type)) { | ||||
addTest("设置温度报警"); | addTest("设置温度报警"); | ||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmTemp(0, AirConst.UNIT_C, 30f, 0f)); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmTemp(0, AirConst.UNIT_C, 30f, 0f, 1)); | |||||
} | } | ||||
break; | break; | ||||
case STEP_WARM_HUMIDITY: | case STEP_WARM_HUMIDITY: | ||||
type = AirConst.AIR_TYPE_HUMIDITY; | type = AirConst.AIR_TYPE_HUMIDITY; | ||||
if (isSupportWarmType(type)) { | if (isSupportWarmType(type)) { | ||||
addTest("设置湿度报警"); | addTest("设置湿度报警"); | ||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmHumidity(0, 60f, 7f)); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setWarmHumidity(0, 60f, 7f, 1)); | |||||
} | } | ||||
break; | break; | ||||
case STEP_WARM_PM2_5: | case STEP_WARM_PM2_5: | ||||
case STEP_CAL_HCHO: | case STEP_CAL_HCHO: | ||||
type = AirConst.AIR_TYPE_FORMALDEHYDE; | type = AirConst.AIR_TYPE_FORMALDEHYDE; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置甲醛校准"); | |||||
addTest("设置甲醛校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_TEMP: | case STEP_CAL_TEMP: | ||||
type = AirConst.AIR_TYPE_TEMP; | type = AirConst.AIR_TYPE_TEMP; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置温度校准"); | |||||
addTest("设置温度校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_HUMIDITY: | case STEP_CAL_HUMIDITY: | ||||
type = AirConst.AIR_TYPE_HUMIDITY; | type = AirConst.AIR_TYPE_HUMIDITY; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置湿度校准"); | |||||
addTest("设置湿度校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_PM2_5: | case STEP_CAL_PM2_5: | ||||
type = AirConst.AIR_TYPE_PM_2_5; | type = AirConst.AIR_TYPE_PM_2_5; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置PM2.5校准"); | |||||
addTest("设置PM2.5校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_PM1_0: | case STEP_CAL_PM1_0: | ||||
type = AirConst.AIR_TYPE_PM_1; | type = AirConst.AIR_TYPE_PM_1; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置PM1.0校准"); | |||||
addTest("设置PM1.0校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_PM10: | case STEP_CAL_PM10: | ||||
type = AirConst.AIR_TYPE_PM_10; | type = AirConst.AIR_TYPE_PM_10; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置PM10校准"); | |||||
addTest("设置PM10校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_VOC: | case STEP_CAL_VOC: | ||||
type = AirConst.AIR_TYPE_VOC; | type = AirConst.AIR_TYPE_VOC; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置VOC校准"); | |||||
addTest("设置VOC校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_CO2: | case STEP_CAL_CO2: | ||||
type = AirConst.AIR_TYPE_CO2; | type = AirConst.AIR_TYPE_CO2; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置二氧化碳校准"); | |||||
addTest("设置二氧化碳校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_AQI: | case STEP_CAL_AQI: | ||||
type = AirConst.AIR_TYPE_AQI; | type = AirConst.AIR_TYPE_AQI; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置空气质量校准"); | |||||
addTest("设置空气质量校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_TVOC: | case STEP_CAL_TVOC: | ||||
type = AirConst.AIR_TYPE_TVOC; | type = AirConst.AIR_TYPE_TVOC; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置TVOC校准"); | |||||
addTest("设置TVOC校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
case STEP_CAL_CO: | case STEP_CAL_CO: | ||||
type = AirConst.AIR_TYPE_CO; | type = AirConst.AIR_TYPE_CO; | ||||
if (isSupportCalType(type)) { | if (isSupportCalType(type)) { | ||||
addTest("设置一氧化碳校准"); | |||||
addTest("设置一氧化碳校准, 单位校准值加1"); | |||||
mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | mAirDetectorWifeBleData.sendData(AirSendUtil.setCalibrationParam(type, 0)); | ||||
} | } | ||||
break; | break; | ||||
type = AirConst.AIR_ALARM_CLOCK; | type = AirConst.AIR_ALARM_CLOCK; | ||||
if (isSupportType(type)) { | if (isSupportType(type)) { | ||||
addTest("设置闹钟"); | 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; | break; | ||||
case STEP_DONE: | case STEP_DONE: | ||||
} | } | ||||
} | } | ||||
@Override | |||||
public void onResultMasterWarnSwitch(String content) { | |||||
if (mStep == STEP_SETTING_WARN_SWITCH) { | |||||
stepSuccess(content); | |||||
} | |||||
} | |||||
@Override | @Override | ||||
public void onCalResultHCHO(String content) { | public void onCalResultHCHO(String content) { | ||||
if (mStep == STEP_CAL_HCHO) { | if (mStep == STEP_CAL_HCHO) { |
return builder.toString(); | 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 settingList | ||||
* @param supportList | * @param supportList | ||||
* @Param resultInterface | |||||
* @return | * @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(); | StringBuilder builder = new StringBuilder(); | ||||
for (int i = 0; i < settingList.size(); i++) { | for (int i = 0; i < settingList.size(); i++) { | ||||
int type = settingList.keyAt(i); | int type = settingList.keyAt(i); | ||||
break; | break; | ||||
case AirConst.AIR_TYPE_HUMIDITY: | case AirConst.AIR_TYPE_HUMIDITY: | ||||
int hPow = (int) Math.pow(10, supportBean.getPoint()); | 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); | builder.append(humpStr); | ||||
break; | break; | ||||
case AirConst.AIR_TYPE_TEMP: | case AirConst.AIR_TYPE_TEMP: | ||||
String tempStr = "下限值:" + settingBean.getWarmMin() + ", 上限值: "+ settingBean.getWarmMax(); | |||||
String tempStr = "下限值:" + settingBean.getWarmMin() + ", 上限值: " + settingBean.getWarmMax(); | |||||
builder.append(tempStr); | builder.append(tempStr); | ||||
break; | break; | ||||
case AirConst.AIR_SETTING_VOICE: | case AirConst.AIR_SETTING_VOICE: | ||||
resultInterface.onWarmResultCO(AirUtil.getWarmResultStr(supportBean, resultBean)); | resultInterface.onWarmResultCO(AirUtil.getWarmResultStr(supportBean, resultBean)); | ||||
break; | break; | ||||
case AirConst.AIR_TYPE_HUMIDITY: | case AirConst.AIR_TYPE_HUMIDITY: | ||||
String humpStr = "下限值:" + resultBean.getWarmMin() + ", 上限值: "+ resultBean.getWarmMax(); | |||||
String humpStr = "下限值:" + resultBean.getWarmMin() + ", 上限值: " + resultBean.getWarmMax(); | |||||
resultInterface.onWarmResultHumidity(humpStr); | resultInterface.onWarmResultHumidity(humpStr); | ||||
break; | break; | ||||
case AirConst.AIR_TYPE_TEMP: | case AirConst.AIR_TYPE_TEMP: | ||||
String tempStr = "下限值:" + resultBean.getWarmMin() + ", 上限值: "+ resultBean.getWarmMax(); | |||||
String tempStr = "下限值:" + resultBean.getWarmMin() + ", 上限值: " + resultBean.getWarmMax(); | |||||
resultInterface.onWarmResultTemp(tempStr); | resultInterface.onWarmResultTemp(tempStr); | ||||
break; | break; | ||||
case AirConst.AIR_SETTING_VOICE: | case AirConst.AIR_SETTING_VOICE: | ||||
resultInterface.onResultVoice("开关:" + AirUtil.getSwitchStatus(resultBean.isOpen()) + ", Level: "+ resultBean.getValue()); | |||||
resultInterface.onResultVoice("开关:" + AirUtil.getSwitchStatus(resultBean.isOpen()) + ", Level: " + resultBean.getValue()); | |||||
break; | break; | ||||
case AirConst.AIR_SETTING_WARM_DURATION: | case AirConst.AIR_SETTING_WARM_DURATION: | ||||
resultInterface.onResultWarmDuration("时长:" + resultBean.getValue() + " S"); | resultInterface.onResultWarmDuration("时长:" + resultBean.getValue() + " S"); | ||||
case AirConst.AIR_MONITORING_DISPLAY_DATA: | case AirConst.AIR_MONITORING_DISPLAY_DATA: | ||||
resultInterface.onResultMonitoringDisplayData("监测显示数据开关:" + AirUtil.getSwitchStatus(resultBean.isOpen())); | resultInterface.onResultMonitoringDisplayData("监测显示数据开关:" + AirUtil.getSwitchStatus(resultBean.isOpen())); | ||||
break; | break; | ||||
case AirConst.AIR_SETTING_WARM: | |||||
resultInterface.onResultMasterWarnSwitch("指标报警总开关:" + AirUtil.getSwitchStatus(resultBean.isOpen())); | |||||
break; | |||||
default: | default: | ||||
break; | break; | ||||
} | } | ||||
} | } | ||||
for (CalibrationListBean.CalibrationBean bean : list) { | for (CalibrationListBean.CalibrationBean bean : list) { | ||||
String resultStr = AirUtil.getOperateStr(bean.getCalOperate()); | String resultStr = AirUtil.getOperateStr(bean.getCalOperate()); | ||||
switch (bean.getCalType()){ | |||||
switch (bean.getCalType()) { | |||||
case AirConst.AIR_TYPE_FORMALDEHYDE: | case AirConst.AIR_TYPE_FORMALDEHYDE: | ||||
resultInterface.onCalResultHCHO(resultStr); | resultInterface.onCalResultHCHO(resultStr); | ||||
break; | break; |
* @param content | * @param content | ||||
*/ | */ | ||||
public void onResultDataDisplayMode(String content); | public void onResultDataDisplayMode(String content); | ||||
/** | |||||
* 报警总开关设置 | |||||
* @param content | |||||
*/ | |||||
public void onResultMasterWarnSwitch(String content); | |||||
/** | /** | ||||
* 甲醛校准 | * 甲醛校准 | ||||
* @param content | * @param content |
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; | |||||
} | |||||
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) + "]"); | |||||
} | |||||
} |
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(); | |||||
} | |||||
} | |||||
} |
import android.widget.ListView; | import android.widget.ListView; | ||||
import android.widget.RadioButton; | import android.widget.RadioButton; | ||||
import com.pingwang.bluetoothlib.bean.SupportUnitBean; | |||||
import com.pingwang.bluetoothlib.device.BleDevice; | import com.pingwang.bluetoothlib.device.BleDevice; | ||||
import java.text.SimpleDateFormat; | import java.text.SimpleDateFormat; | ||||
addText("收到的A7 PayLoad:[" + A7DataStr + "]"); | addText("收到的A7 PayLoad:[" + A7DataStr + "]"); | ||||
} | } | ||||
@Override | |||||
public void onSupportUnit(List<SupportUnitBean> list) { | |||||
} | |||||
@Override | @Override | ||||
public void onMeasureOk() { | public void onMeasureOk() { | ||||
addText("测量完成"); | addText("测量完成"); | ||||
* | * | ||||
* @param quest 1-请求同步时间 | * @param quest 1-请求同步时间 | ||||
*/ | */ | ||||
@Override | |||||
public void onSyncTime(int quest) { | public void onSyncTime(int quest) { | ||||
if (quest == 1) { | if (quest == 1) { | ||||
if (mWeightScaleDevice != null) { | if (mWeightScaleDevice != null) { |
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:text="广播体重秤"/> | 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> | </LinearLayout> | ||||
android:id="@+id/btn_broadcast_scale" | android:id="@+id/btn_broadcast_scale" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:text="广播体脂秤" /> | |||||
android:text="广播秤" /> | |||||
<Button | <Button | ||||
android:id="@+id/btn_broadcast_blood_oxygen" | android:id="@+id/btn_broadcast_blood_oxygen" | ||||
android:id="@+id/btn_leap_watch" | android:id="@+id/btn_leap_watch" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="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> | ||||
<LinearLayout | <LinearLayout | ||||
android:id="@+id/btn_weight_scale" | android:id="@+id/btn_weight_scale" | ||||
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:text="连接体重秤"/> | |||||
android:text="体重秤"/> | |||||
</LinearLayout> | </LinearLayout> | ||||
<?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> |
<color name="colorAccent">#D81B60</color> | <color name="colorAccent">#D81B60</color> | ||||
<color name="public_white">#FFFFFF</color> | <color name="public_white">#FFFFFF</color> | ||||
<color name="public_press_bg">#dcdcdc</color> | <color name="public_press_bg">#dcdcdc</color> | ||||
<color name="white">#FFFFFF</color> | |||||
<color name="black">#000000</color> | |||||
</resources> | </resources> |