[2.13.0 优化蓝牙连接 ]

This commit is contained in:
lixiaopeng
2022-12-07 11:16:02 +08:00
parent f7523f0367
commit 23fca9e51b
7 changed files with 135 additions and 0 deletions

View File

@@ -5,5 +5,7 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
</manifest>

View File

@@ -15,6 +15,7 @@ import com.zhjt.mogo_core_function_devatools.badcase.BadCaseManager
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigCenter.Companion.bizConfigCenter
import com.zhjt.mogo_core_function_devatools.funcconfig.FuncConfigImpl
import com.zhjt.mogo_core_function_devatools.logcatch.MogoLogCatchManager
import com.zhjt.mogo_core_function_devatools.mofang.MoFangManager
import com.zhjt.mogo_core_function_devatools.monitor.MonitorManager
import com.zhjt.mogo_core_function_devatools.scene.SceneManager.Companion.sceneManager
import com.zhjt.mogo_core_function_devatools.status.*
@@ -42,6 +43,7 @@ class DevaToolsProvider : IDevaToolsProvider {
bizConfigCenter.init(mContext!!)
FuncConfigImpl.init()
MogoLogCatchManager.init(mContext!!)
MoFangManager.INSTANCE.init(mContext!!)
}
override fun startLogCatch() {

View File

@@ -0,0 +1,109 @@
package com.zhjt.mogo_core_function_devatools.mofang
import android.annotation.SuppressLint
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.util.Log
import com.mogo.commons.context.ContextHolderUtil.getContext
import com.mogo.eagle.core.function.call.hmi.CallerHmiManager.updateMfStatusView
import com.mogo.eagle.core.utilcode.mogo.storage.SharedPrefsMgr
@SuppressLint("StaticFieldLeak")
class MoFangManager private constructor() {
companion object {
val INSTANCE: MoFangManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
MoFangManager()
}
}
private var mContext: Context? = null
private val TAG = "MoFangManager"
private val mBluetoothAdapter: BluetoothAdapter? = null
private var deviceName = ""
//添加状态判断
private var isMfConnect: Boolean = false
fun init(context: Context) {
// initBluetooth()
// mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
// if (!mBluetoothAdapter.isEnabled) {
// mBluetoothAdapter.enable()
// }
// mBluetoothAdapter.startDiscovery()
// showBondedDevice(mBluetoothAdapter)
}
/**
* 初始化蓝牙广播
*/
private fun initBluetooth() {
val intentFilter = IntentFilter();
// 监视蓝牙关闭和打开的状态
intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
// 监视蓝牙设备与APP连接的状态
intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
// 注册广播
getContext().registerReceiver(bluetoothMonitorReceiver, intentFilter);
}
/**
* 查找蓝牙连接过的蓝牙设备
*/
private fun showBondedDevice(bluetoothAdapter: BluetoothAdapter) {
// val deviceList = bluetoothAdapter.bondedDevices
// for (device in deviceList) {
// try {
// //使用反射调用获取设备连接状态方法
// val isConnectedMethod = BluetoothDevice::class.java.getDeclaredMethod(
// "isConnected",
// *null as Array<Class<*>?>?
// )
// isConnectedMethod.isAccessible = true
//// boolean isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null);
// Log.d(TAG, "-- device.getName() = " + device.name) //device.getAddress()
// if (device.name == "MINI_KEYBOARD") { //并且连接 TODO
// SharedPrefsMgr.getInstance(getContext()).putString("BLUETOOTH", device.name)
// }
// } catch (e: NoSuchMethodException) {
// e.printStackTrace()
// }
// }
}
private val bluetoothMonitorReceiver: BroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
BluetoothAdapter.ACTION_STATE_CHANGED -> { //中间状态
}
BluetoothDevice.ACTION_ACL_CONNECTED -> { //蓝牙设备已连接
if (!isMfConnect) {
updateMfStatusView("mofang", true)
isMfConnect = true
}
}
BluetoothDevice.ACTION_ACL_DISCONNECTED -> { //蓝牙设备已断开 主动更新 TODO
if (isMfConnect) {
updateMfStatusView("mofang", false)
isMfConnect = false
}
}
}
}
}
}