From 5c4d1b18d5b71e6356e9baa4077e956aeb8b7422 Mon Sep 17 00:00:00 2001 From: wenfei Date: Fri, 14 Nov 2025 13:56:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E8=93=9D=E7=89=99?= =?UTF-8?q?=E6=89=AB=E6=8F=8Fsdk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 24 +- .../rehome/dywoa/ui/activity/LoginActivity.kt | 3 + .../sbxdjgl/BlueToothDeviceSdkActivity.java | 566 ++++++++++++++++++ .../ui/activity/sbxdjgl/SbxdjglActivity.java | 10 +- app/src/main/res/drawable-xhdpi/icon19.png | Bin 0 -> 8943 bytes .../layout/activity_blue_tooth_device_sdk.xml | 73 +++ 6 files changed, 666 insertions(+), 10 deletions(-) create mode 100644 app/src/main/java/com/rehome/dywoa/ui/activity/sbxdjgl/BlueToothDeviceSdkActivity.java create mode 100644 app/src/main/res/drawable-xhdpi/icon19.png create mode 100644 app/src/main/res/layout/activity_blue_tooth_device_sdk.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 932c14d..3750330 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,24 +2,27 @@ - + - + android:required="true" /> - - + - - - @@ -346,6 +349,11 @@ android:name=".bleUtil.BlueToothDeviceActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:screenOrientation="portrait" /> + () { binding.etUsername.setText("RH00002") binding.etPassword.setText("RH20251029.") +// binding.etUsername.setText("972526") +// binding.etPassword.setText("Wq20001221.") + //瑞洪 RH00002/王总 RH00002/chao工 RH00003/范红波 diff --git a/app/src/main/java/com/rehome/dywoa/ui/activity/sbxdjgl/BlueToothDeviceSdkActivity.java b/app/src/main/java/com/rehome/dywoa/ui/activity/sbxdjgl/BlueToothDeviceSdkActivity.java new file mode 100644 index 0000000..2f587c1 --- /dev/null +++ b/app/src/main/java/com/rehome/dywoa/ui/activity/sbxdjgl/BlueToothDeviceSdkActivity.java @@ -0,0 +1,566 @@ +package com.rehome.dywoa.ui.activity.sbxdjgl; + + +import android.Manifest; +import android.annotation.SuppressLint; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.bluetooth.BluetoothManager; +import android.bluetooth.le.BluetoothLeScanner; +import android.bluetooth.le.ScanCallback; +import android.bluetooth.le.ScanResult; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Color; +import android.os.Build; +import com.bjzc.blemanager.BluetoothLeService; +import android.os.Handler; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.activity.EdgeToEdge; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +//import com.clj.fastble.BleManager; +import com.bjzc.blemanager.BleManager; +import com.clj.fastble.callback.BleScanCallback; +import com.clj.fastble.data.BleDevice; +import com.clj.fastble.data.BleScanState; +import com.clj.fastble.scan.BleScanRuleConfig; +import com.google.gson.Gson; +import com.rehome.dywoa.Contans; +import com.rehome.dywoa.R; +import com.rehome.dywoa.adapter.XzjhAdapter; +import com.rehome.dywoa.base.BaseActivity; +import com.rehome.dywoa.utils.SPUtils; + +import java.util.ArrayList; +import java.util.List; + +/** + * 蓝牙扫描 + * https://developer.android.google.cn/develop/connectivity/bluetooth/ble/find-ble-devices?hl=zh-cn + */ +public class BlueToothDeviceSdkActivity extends BaseActivity { + + ListView lv; + TextView ble_status; + TextView ble_dianlang; + + private BluetoothAdapter mBluetoothAdapter; + private ArrayList mPermissionList = new ArrayList(); + private BluetoothLeScanner bluetoothLeScanner; + private boolean scanning=false; + private Handler handler = new Handler(); + + // Stops scanning after 10 seconds. + private static final long SCAN_PERIOD = 10000; + + //private LeDeviceListAdapter leDeviceListAdapter = new LeDeviceListAdapter(); + private LeDeviceListAdapter mLeDeviceListAdapter; + + private BleManager ble; + private int selectItem = -1; + private String cmd = ""; + private String str = ""; + + @Override + public int getContentViewID() { + return R.layout.activity_blue_tooth_device; + } + + @Override + public void initView() { + lv = findViewById(R.id.lv); + ble_status = findViewById(R.id.ble_status); + ble_dianlang = findViewById(R.id.ble_dianlang); + ble = BleManager.getInstance(); + str = ble.init(BlueToothDeviceSdkActivity.this); + showLog(str); + + ble.setOnReceiveListener(new BleManager.OnReceiveListener() { + @SuppressLint("SetTextI18n") + @Override + public void onShowMessage(Context context, Intent intent) { + final String action = intent.getAction(); + if (BluetoothDevice.ACTION_FOUND.equals(action)) { + BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); + if (ActivityCompat.checkSelfPermission(BlueToothDeviceSdkActivity.this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // ActivityCompat#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for ActivityCompat#requestPermissions for more details. + return; + } + showLog("扫描发现设备" + device.getName() + "," + device.getAddress()); + String deviceName = device.getName(); + if (deviceName != null && !deviceName.isEmpty()&&deviceName.startsWith("W3")){ + //showLog(new Gson().toJson(device)); + mLeDeviceListAdapter.addDevice(device); + mLeDeviceListAdapter.notifyDataSetChanged(); + } + } else if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) { + showLog("连接"); + mLeDeviceListAdapter.setSelectItem(selectItem); + mLeDeviceListAdapter.notifyDataSetChanged(); + + BluetoothDevice device = mLeDeviceListAdapter.getDevice(selectItem); + String deviceName = device.getName(); + if (deviceName != null && !deviceName.isEmpty()){ + SPUtils.put(context, Contans.KEY_BLUE_TOOTH,device.getAddress()); + } + } else if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)) { + showLog("断开"); + } else if (BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) { + showLog("数据传输通道准备就绪,可以发送数据了。"); + ble.write("BV", false); + cmd="BV"; + ble_status.setText("已连接"); + ble_status.setTextColor(Color.parseColor("#00FF7F"));//连接之后的颜色 + } else if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)) { + byte[] data= intent.getByteArrayExtra(BluetoothLeService.EXTRA_DATA); + String resultReceive = new String(data); + showLog("收到传感器数据" + resultReceive); + showLog(cmd); +// if("BV".equals(cmd)){ +// //showLog(resultReceive); +// ble_dianlang.setText(resultReceive+"%"); +// } + } + } + }); + + initToolbar("蓝牙传感器管理", "扫描蓝牙", new View.OnClickListener() { + @Override + public void onClick(View v) { + showLog("蓝牙数据管理"); + bleScan(); + } + }); + //BleManager.getInstance().init(getApplication()); + + + + + mLeDeviceListAdapter = new LeDeviceListAdapter(new LeDeviceListAdapter.CallBackBlueToothBind() { + + @Override + public void Click(int position) { + showLog(String.valueOf(position)); + BluetoothDevice device = mLeDeviceListAdapter.getDevice(position); + if (ActivityCompat.checkSelfPermission(BlueToothDeviceSdkActivity.this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // ActivityCompat#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for ActivityCompat#requestPermissions for more details. + return; + } + selectItem=position; + ble.connect(device.getAddress(),device.getName()); + } + }, new LeDeviceListAdapter.CallBackBlueToothSendData() { + @Override + public void Click(int position) { + //ble.write(String cmd, Boolean ishex) + //读固件版本号 + //ble.write("VR", false); + //读电量 + ble.write("BV", false); + cmd="BV"; + //温度测量 + //ble.write("0B0B6300", true); + //距离测量 + //ble.write("4453", true); + //转速测量 + //ble.write("0F3101", true); + //cmd="0F3101"; + //加速度测量 + //ble.write("1F11", true); + //速度测量。 + //ble.write("1F12", true); + //位移测量 + //ble.write("1F13", true); + + } + }); + lv.setAdapter(mLeDeviceListAdapter); + } + + private void bleScan(){ + mLeDeviceListAdapter.clear(); + mLeDeviceListAdapter.notifyDataSetChanged(); + selectItem = -1; + ble.disconnect(); + if("BLE is not supported".equals(str)){ + showToast("当前设备不支持低功耗蓝牙,无法连接传感器采集数据"); + } + if("Bluetooth not supported".equals(str)){ + showToast("当前设备不支持蓝牙功能"); + } + if("Bluetooth not enabled".equals(str)){ + showToast("蓝牙功能没有开启"); + } + if("ACCESS_COARSE_LOCATION permission denied".equals(str)){ + showToast("您未授权开启蓝牙扫描附近的设备,请先开启蓝牙权限"); + } + if("context is no Activity".equals(str)){ + showToast("Init(context)方法的参数必须是 Activity"); + } + if("OK".equals(str)){ + ble.scan(); + } + } + + @Override + public void initData() { + bleScan(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + ble.disconnect(); +// if(BleManager.getInstance().getScanSate()== BleScanState.STATE_SCANNING){ +// BleManager.getInstance().cancelScan(); +// } +// BleManager.getInstance().disconnectAllDevice(); +// BleManager.getInstance().destroy(); + } + + + private void initPermission(){ + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){ + // Android 版本大于等于 Android12 时 + // 只包括蓝牙这部分的权限,其余的需要什么权限自己添加 + mPermissionList.add(Manifest.permission.BLUETOOTH_SCAN); + mPermissionList.add(Manifest.permission.BLUETOOTH_ADVERTISE); + mPermissionList.add(Manifest.permission.BLUETOOTH_CONNECT); + } else { + // Android 版本小于 Android12 及以下版本 + mPermissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION); + mPermissionList.add(Manifest.permission.ACCESS_FINE_LOCATION); + } + showLog(new Gson().toJson(mPermissionList.toArray(new String[0]))); + ActivityCompat.requestPermissions(this,mPermissionList.toArray(new String[0]),1001); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + Log.i("app","onRequestPermissionsResult"); + Log.i("app",String.valueOf(grantResults.length)); + Log.i("app",new Gson().toJson(grantResults)); + boolean hasGrant = true; + for (int grantResult : grantResults) { + if (grantResult != 0) { + //未授权 + hasGrant = false; + break; + } + } + if(hasGrant){ + //已授权 + showToast("已授权低功耗蓝牙"); + BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); + mBluetoothAdapter = bluetoothManager.getAdapter(); + if (mBluetoothAdapter == null) { + Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show(); + }else{ + //可以开始扫描啦 + showLog("可以开始扫描啦"); + bluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner(); + scanLeDevice(); + } + //scanLeDevice(true); + }else{ + showToast("您未授权开启蓝牙连接到Blue设备,请先开启权限"); + } + } + + + public void initBlueTooth() { +// boolean bluetoothAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); +// if(bluetoothAvailable){ +// showLog("传统蓝牙可用"); +// }else{ +// showLog("传统蓝牙不可用"); +// } + boolean bluetoothLEAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE); + + if(bluetoothLEAvailable){ + showLog("低功耗蓝牙可用"); + initPermission(); + }else{ + showLog("低功耗蓝牙不可用"); + showToast("传感器必须使用低功耗蓝牙,当前设备不支持低功耗蓝牙"); + } + } + +// public void initBlueToothFastBle() { +// if(BleManager.getInstance().getScanSate()== BleScanState.STATE_SCANNING){ +// BleManager.getInstance().cancelScan(); +// } +// BleManager.getInstance() +// .enableLog(true) +// .setReConnectCount(1, 5000) +// .setSplitWriteNum(20) +// .setConnectOverTime(10000) +// .setOperateTimeout(5000); +// +// BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder() +// .setAutoConnect(true) +// .setScanTimeOut(10000) +// .build(); +// BleManager.getInstance().initScanRule(scanRuleConfig); +// +// BleManager.getInstance().scan(new BleScanCallback() { +// @Override +// public void onScanStarted(boolean success) { +// showToast("开始蓝牙扫描"); +// } +// +// @Override +// public void onScanning(BleDevice bleDevice) { + //// if (context != null && !BlueToothDeviceActivity.this.isFinishing() && !BlueToothDeviceActivity.this.isDestroyed()) { + //// showToast("发现设备"); + //// } +// BluetoothDevice device = bleDevice.getDevice(); +// if(device!=null){ +// if (ActivityCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { +// // TODO: Consider calling +// // ActivityCompat#requestPermissions +// // here to request the missing permissions, and then overriding +// // public void onRequestPermissionsResult(int requestCode, String[] permissions, +// // int[] grantResults) +// // to handle the case where the user grants the permission. See the documentation +// // for ActivityCompat#requestPermissions for more details. +// return; +// } +// String deviceName = device.getName(); +// if (deviceName != null && !deviceName.isEmpty()){ +// showLog(new Gson().toJson(device)); +// mLeDeviceListAdapter.addDevice(bleDevice.getDevice()); +// mLeDeviceListAdapter.notifyDataSetChanged(); +// } +// } +// } +// +// @Override +// public void onScanFinished(List scanResultList) { +// if (context != null && !BlueToothDeviceActivity.this.isFinishing() && !BlueToothDeviceActivity.this.isDestroyed()) { +// showToast("蓝牙扫描结束"); +// } +// showLog(String.valueOf(mLeDeviceListAdapter.getCount())); +// showLog(new Gson().toJson(scanResultList)); +// } +// }); +// } + + private void scanLeDevice() { + if (!scanning) { + // Stops scanning after a predefined scan period. + handler.postDelayed(new Runnable() { + @Override + public void run() { + scanning = false; + if (ActivityCompat.checkSelfPermission(BlueToothDeviceSdkActivity.this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // ActivityCompat#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for ActivityCompat#requestPermissions for more details. + showToast("蓝牙扫描未授权"); + return; + } + bluetoothLeScanner.stopScan(leScanCallback); + } + }, SCAN_PERIOD); + scanning = true; + if (ActivityCompat.checkSelfPermission(BlueToothDeviceSdkActivity.this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // ActivityCompat#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for ActivityCompat#requestPermissions for more details. + showToast("您未授权开启蓝牙连接到Blue设备,请先开启权限"); + return; + } + bluetoothLeScanner.startScan(leScanCallback); + } else { + scanning = false; + bluetoothLeScanner.stopScan(leScanCallback); + } + } + + private ScanCallback leScanCallback = new ScanCallback() { + @Override + public void onScanResult(int callbackType, ScanResult result) { + super.onScanResult(callbackType, result); + showToast("发现新设备啦"); + mLeDeviceListAdapter.addDevice(result.getDevice()); + mLeDeviceListAdapter.notifyDataSetChanged(); + } + }; + + private class LeDeviceListAdapter extends BaseAdapter { + private class ViewHolder { + TextView deviceName; + TextView deviceStatus; + TextView deviceBind; + TextView deviceDeBind; + TextView sendData; + } + + private ArrayList mLeDevices; + private LayoutInflater mInflator; + private LeDeviceListAdapter.CallBackBlueToothBind callBackBlueToothBind; + private LeDeviceListAdapter.CallBackBlueToothUnBind callBackBlueToothUnBind; + private LeDeviceListAdapter.CallBackBlueToothSendData callBackBlueToothSendData; + + public LeDeviceListAdapter(LeDeviceListAdapter.CallBackBlueToothBind callBackBlueToothBind, + LeDeviceListAdapter.CallBackBlueToothSendData callBackBlueToothSendData) { + super(); + mLeDevices = new ArrayList(); + mInflator = BlueToothDeviceSdkActivity.this.getLayoutInflater(); + this.callBackBlueToothBind=callBackBlueToothBind; + this.callBackBlueToothSendData=callBackBlueToothSendData; + } + + public interface CallBackBlueToothBind { + void Click(int position); + } + + public interface CallBackBlueToothUnBind { + void Click(int position); + } + + public interface CallBackBlueToothSendData { + void Click(int position); + } + + public void addDevice(BluetoothDevice device) { + if (!mLeDevices.contains(device)) { + mLeDevices.add(device); + } + } + + public BluetoothDevice getDevice(int position) { + return mLeDevices.get(position); + } + + public void clear() { + mLeDevices.clear(); + } + + @Override + public int getCount() { + return mLeDevices.size(); + } + + @Override + public Object getItem(int i) { + return mLeDevices.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + LeDeviceListAdapter.ViewHolder viewHolder; + if (view == null) { + view = mInflator.inflate(R.layout.listitem_device, null); + viewHolder = new LeDeviceListAdapter.ViewHolder(); + viewHolder.deviceName = view.findViewById(R.id.device_name); + viewHolder.deviceStatus = view.findViewById(R.id.device_status); + viewHolder.deviceBind = view.findViewById(R.id.device_bind); + viewHolder.deviceDeBind = view.findViewById(R.id.device_de_bind); + viewHolder.sendData = view.findViewById(R.id.send_data); + view.setTag(viewHolder); + } else { + viewHolder = (LeDeviceListAdapter.ViewHolder) view.getTag(); + } + + BluetoothDevice device = mLeDevices.get(i); + if (ActivityCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { + // TODO: Consider calling + // ActivityCompat#requestPermissions + // here to request the missing permissions, and then overriding + // public void onRequestPermissionsResult(int requestCode, String[] permissions, + // int[] grantResults) + // to handle the case where the user grants the permission. See the documentation + // for ActivityCompat#requestPermissions for more details. + return null; + } + String deviceName = device.getName(); + if (deviceName != null && !deviceName.isEmpty()) + viewHolder.deviceName.setText(deviceName); + else{ + viewHolder.deviceName.setText(R.string.unknown_device); + } + //当前点击选中的变色 + if (i == selectItem) { + viewHolder.deviceName.getPaint().setFakeBoldText(true); + //viewHolder.deviceName.setTextColor(Color.parseColor("#00FF7F"));//连接之后的颜色 + viewHolder.deviceStatus.setTextColor(Color.parseColor("#00FF7F"));//连接之后的颜色 + viewHolder.deviceStatus.setText("已连接"); + } else { + viewHolder.deviceName.getPaint().setFakeBoldText(false); + //viewHolder.deviceName.setTextColor(Color.parseColor("#00FF7F"));//连接之后的颜色 + viewHolder.deviceStatus.setTextColor(Color.parseColor("#000000")); + viewHolder.deviceStatus.setText("未绑定"); + } + viewHolder.deviceBind.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(callBackBlueToothBind!=null){ + callBackBlueToothBind.Click(i); + } + } + }); + viewHolder.sendData.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(callBackBlueToothSendData!=null){ + callBackBlueToothSendData.Click(i); + } + } + }); + + + + return view; + } + + public void setSelectItem(int selectItem) { + this.selectItem = selectItem; + } + + private int selectItem = -1; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/rehome/dywoa/ui/activity/sbxdjgl/SbxdjglActivity.java b/app/src/main/java/com/rehome/dywoa/ui/activity/sbxdjgl/SbxdjglActivity.java index f889150..6f7869c 100755 --- a/app/src/main/java/com/rehome/dywoa/ui/activity/sbxdjgl/SbxdjglActivity.java +++ b/app/src/main/java/com/rehome/dywoa/ui/activity/sbxdjgl/SbxdjglActivity.java @@ -19,6 +19,7 @@ import com.rehome.dywoa.R; import com.rehome.dywoa.adapter.GridViewYXAdapter; import com.rehome.dywoa.base.BaseActivity2; import com.rehome.dywoa.bean.GridViewBean; +import com.rehome.dywoa.bleUtil.BlueToothDeviceActivity; import com.rehome.dywoa.ui.activity.sbxj.NFCInfoActivity; import com.rehome.dywoa.utils.GsonUtils; import com.rehome.dywoa.utils.HttpListener; @@ -43,9 +44,9 @@ import java.util.Map; public class SbxdjglActivity extends BaseActivity2 { GridView gv; - private final String[] str = {"任务", "工作", "统计", "读取NFC标签", "缺陷工单录入", "免检申请"}; + private final String[] str = {"任务", "工作", "统计", "读取NFC标签", "缺陷工单录入", "免检申请", "蓝牙传感器管理"}; private final int[] imageId = {R.drawable.icon3, R.drawable.icon6, R.drawable.icon_task_count, R.drawable.icon11, - R.drawable.icon15, R.drawable.icon18}; + R.drawable.icon15, R.drawable.icon18, R.drawable.icon19}; private GridViewYXAdapter adapter; @@ -121,6 +122,11 @@ public class SbxdjglActivity extends BaseActivity2 { intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); break; + case 6: + intent = new Intent(SbxdjglActivity.this, BlueToothDeviceActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); + startActivity(intent); + break; } } }); diff --git a/app/src/main/res/drawable-xhdpi/icon19.png b/app/src/main/res/drawable-xhdpi/icon19.png new file mode 100644 index 0000000000000000000000000000000000000000..b938603d1fb77a7a320c795aebd4312e87226e92 GIT binary patch literal 8943 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 S?fdfO04T|+%2rF8h5R2eoiGCc literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_blue_tooth_device_sdk.xml b/app/src/main/res/layout/activity_blue_tooth_device_sdk.xml new file mode 100644 index 0000000..e48ebbc --- /dev/null +++ b/app/src/main/res/layout/activity_blue_tooth_device_sdk.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + +