Android 蓝牙can';在SDP查询中找不到自定义服务UUID

Android 蓝牙can';在SDP查询中找不到自定义服务UUID,android,bluetooth,kotlin,Android,Bluetooth,Kotlin,我的应用程序中有一部分专门用于通过蓝牙在设备之间共享文件,该应用程序使用了一种快速、特别的协议,由我编写。目前,在包含活动中我开始查找,并将找到的任何设备添加到RecyclerView中。以下是正在处理的广播接收器的代码: private val scanReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (inten

我的应用程序中有一部分专门用于通过蓝牙在设备之间共享文件,该应用程序使用了一种快速、特别的协议,由我编写。目前,在包含
活动中
我开始查找,并将找到的任何设备添加到RecyclerView中。以下是正在处理的
广播接收器的代码:

private val scanReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == BluetoothDevice.ACTION_FOUND) {
            val dev = intent.getParcelableExtra<BluetoothDevice>(BluetoothDevice.EXTRA_DEVICE)
            Log.d(TAG, "Got device ${dev.name} with address ${dev.address}")
            if (dev.name != null) {
                Log.d(TAG, "Found nonnull device name, adding")
                if (!viewAdapter.dataset.any { it.name == dev.name }) {
                    viewAdapter.dataset.add(dev)
                    viewAdapter.notifyDataSetChanged()
                }
            }
        }
    }
}
private val scanReceiver=对象:BroadcastReceiver(){
覆盖接收(上下文:上下文,意图:意图){
if(intent.action==BluetoothDevice.action\u找到){
val dev=intent.getParcelableExtra(BluetoothDevice.EXTRA_设备)
Log.d(标记,“获取了地址为${dev.address}的设备${dev.name}”)
if(dev.name!=null){
Log.d(标记“找到非空设备名,添加”)
如果(!viewAdapter.dataset.any{it.name==dev.name}){
viewAdapter.dataset.add(开发人员)
viewAdapter.notifyDataSetChanged()
}
}
}
}
}
我想修改它,使其只添加使用我在应用程序的服务器部分设置的服务UUID进行广播的设备。在做了一些研究之后,我发现我可以用来获取设备上服务的UUID。我将其集成到我的广播接收机中

private val scanReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        when (intent.action) {
            BluetoothDevice.ACTION_FOUND -> {
                val dev = intent.getParcelableExtra<BluetoothDevice>(BluetoothDevice.EXTRA_DEVICE)
                Log.d(TAG, "Got device ${dev.name} with address ${dev.address}")
                if (dev.name != null) {
                    dev.fetchUuidsWithSdp()
                }
            }

            //TODO: Untested code
            BluetoothDevice.ACTION_UUID -> {
                val id = intent.getParcelableExtra<ParcelUuid>(BluetoothDevice.EXTRA_UUID)
                if (id.uuid == ShareServerSocket.SERVICE_UUID) {
                    val dev = intent.getParcelableExtra<BluetoothDevice>(BluetoothDevice.EXTRA_DEVICE)
                    if (!viewAdapter.dataset.any { it.name == dev.name }) {
                        viewAdapter.dataset.add(dev)
                        viewAdapter.notifyDataSetChanged()
                    }
                }
            }
        }
    }
}
private val scanReceiver=对象:BroadcastReceiver(){
覆盖接收(上下文:上下文,意图:意图){
何时(意图、行动){
BluetoothDevice.ACTION\u已找到->{
val dev=intent.getParcelableExtra(BluetoothDevice.EXTRA_设备)
Log.d(标记,“获取了地址为${dev.address}的设备${dev.name}”)
if(dev.name!=null){
开发人员fetchUuidsWithSdp()
}
}
//TODO:未测试的代码
BluetoothDevice.ACTION\u UUID->{
val id=intent.getParcelableExtra(BluetoothDevice.EXTRA_UUID)
if(id.uuid==ShareServerSocket.SERVICE\u uuid){
val dev=intent.getParcelableExtra(BluetoothDevice.EXTRA_设备)
如果(!viewAdapter.dataset.any{it.name==dev.name}){
viewAdapter.dataset.add(开发人员)
viewAdapter.notifyDataSetChanged()
}
}
}
}
}
}
(对
IntentFilter
进行必要的修改后,我正在注册它)

调用新分支中的代码时,我通过一些调试输出验证了这一点。但是,提供给我的
parceluid[]
从未包含我的服务的UUID,因此从未添加设备。如果我在作为服务器的设备上保持整个设置不变,并绕过客户端上的新检查,我就能够很好地连接和交互。我不确定为什么我的服务在这一点上不会被显示


另外,我也检查了SDP缓存,我的服务UUID也不在那里。

结果发现我遇到了与中所述相同的问题。偷了那个变通方法,它就成功了