From b04680ef37126fa760f1de162911d4c58c269814 Mon Sep 17 00:00:00 2001 From: yangyakun Date: Thu, 28 Nov 2024 17:30:07 +0800 Subject: [PATCH] =?UTF-8?q?[6.8.0]=20[fea]=20[=E4=BD=BF=E7=94=A8=E8=93=9D?= =?UTF-8?q?=E7=89=99=E5=B9=BF=E6=92=AD]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manager/bluetooth/AdvertisManager.kt | 38 +++++++++++-------- .../module/manager/bluetooth/BleManager.kt | 3 +- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/bluetooth/AdvertisManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/bluetooth/AdvertisManager.kt index cc4134304f..1b780db11e 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/bluetooth/AdvertisManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/bluetooth/AdvertisManager.kt @@ -13,6 +13,7 @@ import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.utils.RxUtils import io.reactivex.disposables.Disposable import java.util.UUID +import java.util.concurrent.ConcurrentLinkedQueue import kotlin.properties.Delegates object AdvertisManager { @@ -38,12 +39,14 @@ object AdvertisManager { @SuppressLint("MissingPermission") fun closeAllBroadCast(){ - if (callbackListUsing.isEmpty()) { + if (callbackListUsing.isEmpty()&& waitBroadData.isEmpty()) { return } callbackListUsing.forEach { stopBroadCast(it) + it.dataInnser = null } + waitBroadData.clear() callbackListUnUse.addAll(callbackListUsing) callbackListUsing.clear() } @@ -62,37 +65,38 @@ object AdvertisManager { if(data==null){ if(waitBroadData.isEmpty()){ return + }else{ + val last = waitBroadData.last() + tempData = last } - val last = waitBroadData.last() - tempData = last + }else{ tempData = data // 查找订单一样的广播替换数据 val sameData = findSampleOrderAndReplace(tempData) if(sameData!=null){ - CallerLogger.d(TAG,"停止广播:${tempData}") if (sameData is BleBroadCastData) { + CallerLogger.d(TAG,"找到重复数据、在待广播中${tempData}") // 移除旧的离开播放新的 waitBroadData.remove(sameData) - CallerLogger.d(TAG,"移除待广播:有新的结果${tempData}") }else if(sameData is AdvertiseCallbackWithData){ + CallerLogger.d(TAG,"找到重复数据、正在播放中马上关闭${tempData}") // 离开结束播放 sameData.close(false) - CallerLogger.d(TAG,"停止广播:有新的结果来进行广播${tempData}") } } } // 站点不一样 关闭所有的广播并设置新的站点id if(tempData.siteId!= broadCastSite){ - CallerLogger.d(TAG,"停止广播:站点切换停止广播_通过广播内容检测") + CallerLogger.d(TAG,"站点不一样 清理所有广播") closeAllBroadCast() - waitBroadData.clear() this.broadCastSite = tempData.siteId } // 来了新的广播 关闭播放时间最长的一个广播 并放入未使用列表 if(callbackListUsing.size>=5){ // 停止播放 播放时间最长的callback val currentTime = System.currentTimeMillis() + // 找出播放时间最长的那个广播 var maxTime = 0L var maxBroadCallback:AdvertiseCallbackWithData?=null callbackListUsing.forEach { @@ -105,7 +109,7 @@ object AdvertisManager { if(maxBroadCallback!=null){ // 添加到当前站点的待播放数据 maxBroadCallback?.close() - CallerLogger.d(TAG,"停止广播:有新的核销切当前广播数大于5${tempData}") + CallerLogger.d(TAG,"正在广播的数已满需关闭广播时间最长的时间${maxTime}${tempData}") }else{ // 放到最后一位 waitBroadData.add(tempData) @@ -136,7 +140,8 @@ object AdvertisManager { .build() //扫描响应数据(可选,当客户端扫描时才发送) val scanResponse = AdvertiseData.Builder() - .addServiceData(ParcelUuid(tempData.uuid), tempData.data.toByteArray()) //服务数据,自定义 + .addServiceUuid(ParcelUuid(tempData.uuid)) +// .addServiceData(ParcelUuid(tempData.uuid), tempData.data.toByteArray()) //服务数据,自定义 .build() if(mBluetoothLeAdvertiser == null) { val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter() @@ -149,7 +154,7 @@ object AdvertisManager { private fun findSampleOrderAndReplace(tempData: BleBroadCastData):Any? { // 正在广播的 callbackListUsing.forEach { - if(isSampleOrder(it.dataInnser.uuid,tempData.uuid)){ + if(isSampleOrder(it.dataInnser?.uuid,tempData.uuid)){ return it } } @@ -163,14 +168,14 @@ object AdvertisManager { } // 是否是同一个UU - fun isSampleOrder(oleUuid:UUID,newUUID: UUID): Boolean { - val oldOrderId = oleUuid.toString().substring(0,22) + private fun isSampleOrder(oleUuid:UUID?,newUUID: UUID): Boolean { + val oldOrderId = oleUuid?.toString()?.substring(0,22) val newOrderId = newUUID.toString().substring(0,22) return oldOrderId==newOrderId } class AdvertiseCallbackWithData(val data:BleBroadCastData): AdvertiseCallback() { - var dataInnser = data + var dataInnser:BleBroadCastData? = data var broadCastDate: Disposable?=null var startTime:Long = 0 @@ -198,13 +203,16 @@ object AdvertisManager { callbackListUnUse.add(this) } if(reUse) { - waitBroadData.add(0, dataInnser) + if(dataInnser!=null) { + waitBroadData.add(0, dataInnser!!) + } } stopBroadCast(this) } override fun onStartFailure(errorCode: Int) { super.onStartFailure(errorCode) + OchChainLogManager.writeChainLogBluetooth("广播","启动广播失败") if(callbackListUnUse.size+ callbackListUsing.size<5) { callbackListUnUse.add(this) } diff --git a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/bluetooth/BleManager.kt b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/bluetooth/BleManager.kt index b80fce742a..b27a54a171 100644 --- a/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/bluetooth/BleManager.kt +++ b/OCH/common/common/src/main/java/com/mogo/och/common/module/manager/bluetooth/BleManager.kt @@ -9,6 +9,7 @@ import android.bluetooth.le.ScanSettings import android.os.ParcelUuid import android.util.Log import com.mogo.och.common.module.manager.bluetooth.bean.BleBroadCastData +import com.mogo.och.common.module.manager.logchainanalytic.OchChainLogManager import com.mogo.och.common.module.utils.RxUtils import java.util.UUID @@ -153,7 +154,7 @@ object BleManager : BaseBluetoothManager() { uuidString.substring(16, 20) + "-" + uuidString.substring(20, 32) // 构造一个标准的 UUID 字符串 val uuid = UUID.fromString(uuidWithDashes) - + OchChainLogManager.writeChainLogWriteOff("核销结果","uuidWithDashes:$uuidWithDashes") AdvertisManager.startOneAd(BleBroadCastData(data,uuid,siteId)) }