我知道可以按照此问题的解决方案中所述获取本地设备名称Display Android Bluetooth Device Name
我感兴趣的是,我可以编程改变本地蓝牙名称(其他设备在我处于发现模式时看到的)。我知道你可以手动更改它,但我正在编写和应用程序,我希望能够更改名称(添加一个简单的标志),以便具有相同应用程序的其他设备可以扫描并立即知道手机是否也在运行应用程序。
tl;博士:如何在Android上更改蓝牙设备名称?
答案 0 :(得分:22)
是的,您可以使用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());
}
答案 1 :(得分:3)
感谢您的原始答案,以下是我在实施时发现的一些可能有助于其他人的事情。
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);
}
}
答案 2 :(得分:1)
要正确更改蓝牙名称,您需要注意以下事项:
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来获取新状态随时更改蓝牙的种类。
注意:由于缓存和硬件地址,并不是所有设备在蓝牙和更改名称时的行为都相同,所以永远不要期望所有设备都具有相同的结果。