2015-05-04 194 views
4

无论配置文件如何,我如何获得所有连接的蓝牙设备的列表?Android蓝牙获取连接的设备

或者,我看到您可以通过BluetoothManager.getConnectedDevices获取特定配置文件的所有连接设备。

而且我想我可以看到哪些设备通过ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED用于连接/断开连接收听...似乎很容易出错

但我想知道是否有一个更简单的方法来获取所有连接的蓝牙设备的列表。

+0

你只是听是正确的acl connected/disconnect存在问题,因为它可能在您的应用未运行或收听广播时发生 – behelit

回答

0

要查看完整列表,这是一个2步操作:当前配对设备

  • 扫描,或发现的

    1. 获取列表,所有的人在范围

    要获取当前配对设备的列表并重复:

    Set<BluetoothDevice> pairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices(); 
    if (pairedDevices.size() > 0) { 
        for (BluetoothDevice d: pairdDevices) { 
         String deviceName = d.getName(); 
         String macAddress = d.getAddress(); 
         Log.i(LOGTAG, "paired device: " + deviceName + " at " + macAddress); 
         // do what you need/want this these list items 
        } 
    } 
    

    发现有点多一个复杂的操作。要做到这一点,你需要告诉BluetoothAdapter开始扫描/发现。当它发现事情时,它发出你需要用BroadcastReceiver接收的Intents。

    首先,我们将设置接收器:

    private void setupBluetoothReceiver() 
    { 
        BroadcastRecevier btReceiver = new BroadcastReciver() { 
         @Override 
         public void onReceive(Context context, Intent intent) { 
          handleBtEvent(context, intent); 
         } 
        }; 
        IntentFilter eventFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
        // this is not strictly necessary, but you may wish 
        // to know when the discovery cycle is done as well 
        eventFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); 
        myContext.registerReceiver(btReceiver, eventFilter); 
    } 
    
    private void handleBtEvent(Context context, Intent intent) 
    { 
        String action = intent.getAction(); 
        Log.d(LOGTAG, "action received: " + action); 
    
        if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
         BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
         Log.i(LOGTAG, "found device: " + device.getName()); 
        } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { 
         Log.d(LOGTAG, "discovery complete"); 
        } 
    } 
    

    现在所有剩下的就是告诉BluetoothAdapter开始扫描:

    BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); 
    // if already scanning ... cancel 
    if (btAdapter.isDiscovering()) { 
        btAdapter.cancelDiscovery(); 
    } 
    
    btAdapter.startDiscovery();