Android蓝牙:fetchUuidsWithSdp()不会返回某些设备上的所有UUID

时间:2014-09-04 06:15:15

标签: android bluetooth android-bluetooth

我有两个不同的蓝牙应用程序。第一个提供服务并侦听来自其他指挥官应用程序的命令。我有一部GT-I9100T手机和一部GT-P5210平板电脑。在监听器上工作的平板电脑工作正常,手机可以看到我的应用程序的UUID。但是,当我将手机作为监听器运行时,未列出监听器的UUID。

我通过我的应用程序UUID过滤设备,以便我知道我只与那些运行应用程序的设备进行通信。

我的听力应用程序看起来像这样(如果我使用不安全的连接,我会得到相同的结果):

private final UUID GUID = UUID.fromString("3DEF793A-FA94-4478-AE56-108854B1EF4B");
// other stuff....
tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(APP_NAME, GUID);

我的指挥官应用程序MainActivity看起来像这样:

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        Log.i(TAG,"Action received: "+action);
        if(action.equals(BluetoothDevice.ACTION_UUID)) {
             BluetoothDevice btd = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
             Log.i(TAG,"Received uuids for "+btd.getName());
             Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
             StringBuilder sb = new StringBuilder();
             List<String> uuids = new ArrayList<String>(uuidExtra.length);
             if(uuidExtra != null) {
                 for (int i = 0; i < uuidExtra.length; i++) {
                    sb.append(uuidExtra[i].toString()).append(',');
                    uuids.add(uuidExtra[i].toString());
                 }
             }
             Log.i(TAG,"ACTION_UUID received for "+btd.getName()+" uuids: "+sb.toString());
             ListContent.addItemWithUUIDs(btd, uuids);
        }
    }
}

我的列表内容(我使用的是主/详细信息模板):

public static synchronized void addItem(BluetoothItem item) {
        BluetoothDevice btd = item.mBluetoothDevice;
        Log.i(TAG,"Attempting to add "+item.mBluetoothDevice.getName());
        if(ITEMS.contains(item)) {
            Log.i(TAG,item.mBluetoothDevice.getName()+" already in list");
            return;
        }
        // Do we know this device?
        Parcelable[] uuids =  btd.getUuids();
        Set<String> setUUIDs = new HashSet<String>();
        StringBuilder sb = new StringBuilder();
        if(uuids != null) {
            for (Parcelable parcelable : uuids) {
                sb.append(parcelable.toString()).append(',');
                setUUIDs.add(parcelable.toString());
            }
        }
        Log.v(TAG,"Device has uuids: "+sb.toString());
        if ((btd.getUuids() != null && setUUIDs.contains(BluetoothItem.GUID.toLowerCase()))){
            Log.i(TAG, "Found app device: " + btd.getName());
            addItem(btd);
        } else {
            // If we don't know this device, perform sdp fetch of uuids
            Log.i(TAG,"Requesting fresh UUIDs for: "+btd.getName());
            // this is flushed when discovering finishes
            CANDIDATES.add(btd);
        }
    }
    public static synchronized void addItemWithUUIDs(BluetoothDevice btd, List<String> uuids) {
        Log.i(TAG,"Attempting to add with uuids"+btd.getName()+" uuids: "+btd.getUuids());
        if (uuids.contains(BluetoothItem.GUID)) {
            Log.i(TAG, "Found app device: " + btd.getName());
            addItem(btd);
        } else {
            Log.i(TAG, "Ignoring device " + btd.getName() + " without app guid");
        }
    }

发现完成后,会发生这种情况:

for (BluetoothDevice i : ListContent.CANDIDATES) {
    Log.i(TAG,"Fetching UUIDs for "+i.getName());
    i.fetchUuidsWithSdp();
}
ListContent.CANDIDATES.clear();

使用平板电脑作为指挥官和手机作为听众时的logcat输出:

DeviceListActivity(29524): Received uuids for GT-I9100T
DeviceListActivity(29524): ACTION_UUID received for GT-I9100T uuids:
0000110a-0000-1000-8000-00805f9b34fb,
00001105-0000-1000-8000-00805f9b34fb,
00001116-0000-1000-8000-00805f9b34fb,
0000112d-0000-1000-8000-00805f9b34fb,
0000112f-0000-1000-8000-00805f9b34fb,
00001112-0000-1000-8000-00805f9b34fb,
0000111f-0000-1000-8000-00805f9b34fb,
00001132-0000-1000-8000-00805f9b34fb,

我通过手机获得正确的输出作为指挥官和平板电脑作为听众:

DeviceListActivity(23121): Received uuids for GT-P5210
DeviceListActivity(23121): ACTION_UUID received for GT-P5210 uuids:
00001105-0000-1000-8000-00805f9b34fb,
0000110a-0000-1000-8000-00805f9b34fb,
0000110c-0000-1000-8000-00805f9b34fb,
00001112-0000-1000-8000-00805f9b34fb,
00001115-0000-1000-8000-00805f9b34fb,
0000111f-0000-1000-8000-00805f9b34fb,
00001200-0000-1000-8000-00805f9b34fb,
3def793a-fa94-4478-ae56-108854b1ef4b,

如您所见,我的应用的GUID被列为最后一项。我已经尝试过让设备可以被发现并且绑定和取消绑定,但我的应用程序的GUID永远不会为手机返回。我有其他非Android设备也使用此GUID,它们也正常被发现。

手机正在运行4.1.2,平板电脑正在运行4.2.2

0 个答案:

没有答案