如何检测蓝牙设备是否已连接

时间:2010-12-28 06:11:02

标签: android

在android中,我的Activity如何知道蓝牙A2DP设备是否连接到我的设备 是否有广播接收器?
如何编写这个广播接收器?

5 个答案:

答案 0 :(得分:12)

从API 11(Android 3.0)开始,您可以使用BluetoothAdapter来发现连接到特定蓝牙配置文件的设备。我使用下面的代码来发现一个名称的设备:

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);

您可以为每个蓝牙配置文件执行此操作。请参阅Android指南中的Working with profiles

但是,正如其他答案中所写,您可以注册一个BroadcastReceiver来监听连接事件(例如当您使用android&lt; 3.0时)。

答案 1 :(得分:10)

您无法通过调用任何API获取已连接设备的列表。 您需要收听通知ACTION_ACL_CONNECTED,ACTION_ACL_DISCONNECTED,以通知有关正在连接或断开的设备。 无法获得连接设备的初始列表。

我在我的应用程序中遇到此问题,我处理它的方式(并没有找到更好......)是在应用程序启动时反弹/关闭蓝牙,以确保以连接设备的空列表开始,然后听听上面的意图。

答案 2 :(得分:1)

muslidrikk的答案大致正确;但是你也可以使用fetchUUIDsWithSDP()看看你得到了什么......虽然它有点像黑客 - 你必须知道你可以从设备中获得什么样的UUID(功能),如果它被打开的话。这可能很难保证。

答案 3 :(得分:0)

对于BluetoothHeadset,您可以调用getConnectedDevices()来获取此特定配置文件的连接设备。

参考:http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html

其他情况下,您需要为此注册接收器。

答案 4 :(得分:-2)

在您的活动中,定义广播接收器......

// 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