2010-12-28 2 views

ответ

10

Начиная с API 11 (Android 3.0), вы можете использовать BluetoothAdapter для обнаружения устройств, подключенных к определенному профилю Bluetooth. Я использовал код ниже, чтобы открыть устройство по его имени:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() { 
     public void onServiceConnected(int profile, BluetoothProfile proxy) { 
      if (profile == BluetoothProfile.A2DP) { 
       boolean deviceConnected = false; 
       BluetoothA2dp btA2dp = (BluetoothA2dp) proxy; 
       List<BluetoothDevice> a2dpConnectedDevices = btA2dp.getConnectedDevices(); 
       if (a2dpConnectedDevices.size() != 0) { 
        for (BluetoothDevice device : a2dpConnectedDevices) { 
         if (device.getName().contains("DEVICE_NAME")) { 
          deviceConnected = true; 
         } 
        } 
       } 
       if (!deviceConnected) { 
        Toast.makeText(getActivity(), "DEVICE NOT CONNECTED", Toast.LENGTH_SHORT).show(); 
       } 
       mBluetoothAdapter.closeProfileProxy(BluetoothProfile.A2DP, btA2dp); 
      } 
     } 

     public void onServiceDisconnected(int profile) { 
      // TODO 
     } 
    }; 
mBluetoothAdapter.getProfileProxy(context, mProfileListener, BluetoothProfile.A2DP); 

Вы можете сделать это для каждого профиля Bluetooth. Взгляните на Working with profiles в руководстве по Android.

Однако, как написано в других ответах, вы можете зарегистрировать BroadcastReceiver для прослушивания событий соединения (например, когда вы работаете на android < 3.0).

9

Вы не можете получить список подключенных устройств, вызвав любой API. Вам нужно вместо этого прослушать намерения ACTION_ACL_CONNECTED, ACTION_ACL_DISCONNECTED, который уведомляет об устройствах, которые подключены или отключены. Невозможно получить начальный список подключенных устройств.

У меня была эта проблема в моем приложении и то, как я ее обрабатываю (не нашел лучшего ...), чтобы отскакивать от Bluetooth в начале приложения, чтобы начать с пустого списка подключенных устройств , а затем прослушайте вышеупомянутые намерения.

+2

Bluetooth был улучшен начиная с API 16 (в API 19 был введен BluetoothManager, и это очень хорошо сделано) .. но для более старых уровней API это правильное решение. –

1

Ответ муслидрика в целом правильный; однако вы также можете использовать fetchUUIDsWithSDP() и посмотреть, что вы вернетесь ... это немного взломать - вам нужно знать, какие UUID (возможности) вы могли бы ожидать от устройства, если бы оно было включено. И это может быть трудно гарантировать.

-1

В вашей деятельности, определять вещательный приемник ...

// Create a BroadcastReceiver for ACTION_FOUND 
private final BroadcastReceiver mReceiver = new BroadcastReceiver() { 
public void onReceive(Context context, Intent intent) { 
    String action = intent.getAction(); 
    // When discovery finds a device 
    if (BluetoothDevice.ACTION_FOUND.equals(action)) { 
     // Get the BluetoothDevice object from the Intent 
     BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
     // Add the name and address to an array adapter to show in a ListView 
     mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); 
    } 
} 

};

// Register the BroadcastReceiver 

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy 
+0

Решение, которое вы предоставили, проверяет устройства, к которым может быть доставлено ваше устройство. –

0

Для BluetoothHeadset конкретно, вы можете вызвать getConnectedDevices(), чтобы получить подключенные устройства для этого конкретного профиля.

Ссылка: http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html

Другие случаи, которые необходимо зарегистрировать приемник для этого.

Смежные вопросы