Как определить, подключено ли устройство Bluetooth - PullRequest
4 голосов
/ 28 декабря 2010

В Android как моя активность узнает, подключено ли устройство Bluetooth A2DP к моему устройству.
Есть ли для этого какой-нибудь вещательный приемник?
Как написать этот приемник вещания?

Ответы [ 5 ]

12 голосов
/ 06 мая 2015

Начиная с 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.Посмотрите Работа с профилями в руководстве по Android.

Однако, как написано в других ответах, вы можете зарегистрировать BroadcastReceiver для прослушивания событий подключения (например, когда вы работаете на Android<3,0). </p>

10 голосов
/ 18 ноября 2011

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

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

1 голос
/ 25 апреля 2013

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

0 голосов
/ 29 октября 2013

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

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

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

0 голосов
/ 22 октября 2013

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

// 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...