更改 Android 蓝牙设备名称

IT小君   2021-12-05T01:56:00

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

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

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

评论(3)
IT小君

是的,您可以使用 蓝牙适配器类型的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());
                }
2021-12-05T01:56:00   回复
IT小君

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

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);
    }
}
2021-12-05T01:56:00   回复
IT小君

要正确更改蓝牙名称,您需要注意以下事项:

1) 您需要以下权限: android.permission.BLUETOOTH android.permission.BLUETOOTH_ADMIN

2) 从适配器检查蓝牙状态,因为您只能更改蓝牙的名称已打开。

val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(bluetoothAdapter.state == BluetoothAdapter.STATE_ON){
   bluetoothAdapter.setName("NewDeviceName");
}

3)如果蓝牙没有开启,那么你可以使用以下命令开启它:

bluetoothAdapter.enable()

4)最后一件事,请不要使用静态定时器来等待蓝牙状态变化,正确的方法是您可以注册 android.bluetooth.adapter.action.STATE_CHANGED 广播并使用BluetoothAdapter.EXTRA_STATE 来获取蓝牙的新状态它被改变了。

注意:在蓝牙和由于缓存和硬件地址而更改名称方面,并非所有设备的行为都相同,因此永远不要期望所有设备的结果都相同。

2021-12-05T01:56:00   回复