如何在安卓设备上获取连接的蓝牙设备名称

3
我正在尝试获取连接到运行Android Oreo的Android手机的设备名称。我已经搜索了过去两天,但没有一个解决方案有效。大多数建议都返回“ioexception-read-failed-socket-might-closed-bluetooth”错误。问题是,有没有办法查询返回已连接的蓝牙设备?以下是不起作用的链接和建议:
- 链接1:IOException:read failed,socket可能关闭-Android 4.3上的蓝牙 - 链接2:{{link2:在Android中,如何获取已连接蓝牙设备的配置文件?}} - 链接3:{{link3:列出已连接的蓝牙设备?}}
我可以获取先前配对的设备信息并尝试建立连接或尝试配对到该设备的设备信息。我想要的是当前配对和连接的设备的名称或连接状态。
2个回答

10

这里是答案:

String name;
String address;
String threadName;
public void checkConnected()
{

       BluetoothAdapter.getDefaultAdapter().getProfileProxy(this, serviceListener, BluetoothProfile.HEADSET);
}

private BluetoothProfile.ServiceListener serviceListener = new BluetoothProfile.ServiceListener()
{
    @Override
    public void onServiceDisconnected(int profile)
    {

    }

    @Override
    public void onServiceConnected(int profile, BluetoothProfile proxy)
    {

        for (BluetoothDevice device : proxy.getConnectedDevices())
        {
            name = device.getName();
            address = device.getAddress();
            threadName = Thread.currentThread().getName();
            Toast.makeText(MainActivity.this, name+" " + address+ threadName,  Toast.LENGTH_SHORT).show();
            txtName.setText(name + " " + address);
            Log.i("onServiceConnected", "|" + device.getName() + " | " + device.getAddress() + " | " + proxy.getConnectionState(device) + "(connected = "
                    + BluetoothProfile.STATE_CONNECTED + ")");
        }

        BluetoothAdapter.getDefaultAdapter().closeProfileProxy(profile, proxy);
    }
};

2

你试过这个吗?

BluetoothServerSocket bluetoothServerSocket = bluetoothAdapter.listenUsingRfcommWithServiceRecord("abc", uuid);          
BluetoothSocket bluetoothSocket = bluetoothServerSocket.accept();
BluetoothDevice device = bluetoothSocket.getRemoteDevice();
String deviceName = device.getName();

看起来代码在这行 BluetoothSocket bluetoothSocket = bluetoothServerSocket.accept(); 处卡住了。 - Hossain Ehsani
是的,它正在等待新的蓝牙连接请求。 - rbdk
你查看了文档吗?https://developer.android.com/guide/topics/connectivity/bluetooth.html#FindingDevices请查看“查询配对设备”和“发现设备”部分。特别是调用device.getName()。 - rbdk
谢谢您的回复。但是我想要的是获取当前配对和连接的蓝牙设备的连接状态,而不是正在尝试连接的设备。对于这种情况,我更喜欢使用广播监听器。 - Hossain Ehsani
关于您提到的链接,BluetoothDevice类没有提供查询配对设备连接状态的功能。 - Hossain Ehsani
非常感谢。 - naima

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接