在android中,我的Activity如何知道蓝牙A2DP设备是否连接到我的设备
是否有广播接收器?
如何编写这个广播接收器?
答案 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)
答案 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