更改安卓蓝牙设备名称

2022-09-02 23:52:21

我知道可以按照此问题的解决方案中所述获取本地设备名称 显示Android蓝牙设备名称

我有兴趣知道的是,我可以以编程方式更改本地buetooth名称(其他设备在发现模式下看到的名称) 吗?我知道你可以手动更改它,但我正在编写和应用程序,我希望能够更改名称(添加一个简单的标志),以便具有相同应用程序的其他设备可以扫描并立即知道手机是否也在运行该应用程序。

tl;dr: 如何在安卓上更改蓝牙设备名称?


答案 1

是的,您可以使用蓝牙适配器类型的setName(字符串名称)更改设备名称。下面是示例代码:

    private BluetoothAdapter bluetoothAdapter = null;
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

    void ChangeDeviceName(){
                    Log.i(LOG, "localdevicename : "+bluetoothAdapter.getName()+" localdeviceAddress : "+bluetoothAdapter.getAddress());
                    bluetoothAdapter.setName("NewDeviceName");
                    Log.i(LOG, "localdevicename : "+bluetoothAdapter.getName()+" localdeviceAddress : "+bluetoothAdapter.getAddress());
                }

答案 2

感谢您的原始答案,以下是我在实现时发现的一些可能有助于其他人的事情。

1) 必须启用 BT 才能使 setName() 正常工作。

2)BT需要时间才能启用。即。你不能只是调用 enable() 然后 setName()

3)这个名字需要时间才能“沉浸其中”。即。你不能在 setName() 之后立即调用 getName() 并期望新名称。

所以,这是我想出的一段代码,使用一个runnable在后台完成工作。它也被限制为10秒,所以如果出现问题,它不会永远运行。

最后,这是我们电源检查的一部分,我们通常会禁用BT(由于电池)。所以,我把BT关掉之后,你可能不想这样做。

// BT Rename
//
final String sNewName = "Syntactics";
final BluetoothAdapter myBTAdapter = BluetoothAdapter.getDefaultAdapter();
final long lTimeToGiveUp_ms = System.currentTimeMillis() + 10000;
if (myBTAdapter != null)
{
    String sOldName = myBTAdapter.getName();
    if (sOldName.equalsIgnoreCase(sNewName) == false)
    {
        final Handler myTimerHandler = new Handler();
        myBTAdapter.enable();
        myTimerHandler.postDelayed(
                new Runnable()
                {
                    @Override
                    public void run()
                    {
                        if (myBTAdapter.isEnabled())
                        {
                            myBTAdapter.setName(sNewName);
                            if (sNewName.equalsIgnoreCase(myBTAdapter.getName()))
                            {
                                Log.i(TAG_MODULE, "Updated BT Name to " + myBTAdapter.getName());
                                myBTAdapter.disable();
                            }
                        }
                        if ((sNewName.equalsIgnoreCase(myBTAdapter.getName()) == false) && (System.currentTimeMillis() < lTimeToGiveUp_ms))
                        {
                            myTimerHandler.postDelayed(this, 500);
                            if (myBTAdapter.isEnabled())
                                Log.i(TAG_MODULE, "Update BT Name: waiting on BT Enable");
                            else
                                Log.i(TAG_MODULE, "Update BT Name: waiting for Name (" + sNewName + ") to set in");
                        }
                    }
                } , 500);
    }
}

推荐