更改Android蓝牙设备名称

Dai*_*tsu 13 java android bluetooth

我知道可以获得本问题解决方案中描述的本地设备名称显示Android蓝牙设备名称

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

tl;博士:如何在Android上更改蓝牙设备名称?

Mav*_*ick 24

是的,您可以使用 BluetoothAdapter类型的setName(String name)更改您的设备名称.以下是示例代码:

    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());
                }
Run Code Online (Sandbox Code Playgroud)

  • 这似乎确实有效,但似乎也存在一些缓存问题(即连接的设备总是具有旧名称)。如果有人遇到此问题,请进入手机蓝牙设置并查看设备,这似乎为我清除了缓存 (3认同)

小智 8

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

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

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

3)名字“下沉”需要时间。IE。您不能在 setName() 之后立即调用 getName() 并期望获得新名称。

所以,这是我想出的一段代码,用于使用可运行对象在后台完成工作。它也有 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);
    }
}
Run Code Online (Sandbox Code Playgroud)