Изменение имени устройства Bluetooth Bluetooth

Я знаю, что можно получить имя локального устройства, как описано в решении этого вопроса Показать имя устройства Bluetooth Android

Мне интересно знать, могу ли я изменить локальное имя Bluetooth (другое устройство увидит, когда я в режиме обнаружения) programaticlly. Я знаю, что вы можете изменить его вручную, но я пишу и приложение, и я хочу иметь возможность изменить имя (добавить простой флаг), чтобы другие устройства с одним и тем же приложением могли сканировать и сразу же узнать, работает ли телефон приложение.

tl; dr: Как я могу изменить имя устройства bluetooth на Android?

Ответ 1

Да, вы можете изменить имя своего устройства с помощью setName (имя строки) типа BluetoothAdapter. Следующее - пример кода:

    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) Для того, чтобы имя "погрузилось", требуется время. то есть. вы не можете вызвать getName() сразу после setName() и ожидать нового имени.

Итак, вот фрагмент кода, который я придумал, чтобы использовать 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);
    }
}