Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改Android蓝牙设备名称_Java_Android_Bluetooth - Fatal编程技术网

Java 更改Android蓝牙设备名称

Java 更改Android蓝牙设备名称,java,android,bluetooth,Java,Android,Bluetooth,我知道有可能获得此问题解决方案中描述的本地设备名称 我感兴趣的是,我可以通过编程更改本地buetooth名称(当我处于发现模式时,其他设备可以看到的名称)。我知道你可以手动更改,但我正在编写和应用程序,我希望能够更改名称(添加一个简单的标志),以便使用相同应用程序的其他设备可以扫描并立即知道手机是否也在运行该应用程序 tl;dr:如何在android上更改蓝牙设备名称?是的,您可以使用BluetoothAdapter类型的设置名称(字符串名称)更改设备名称。以下是示例代码: privat

我知道有可能获得此问题解决方案中描述的本地设备名称

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


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

是的,您可以使用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());
                }

感谢您提供的原始答案,以下是我在实现时发现的一些可能帮助其他人解决问题的方法

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);
    }
}
//BT重命名
//
最后一个字符串sNewName=“语法”;
最终BluetoothAdapter myBTAdapter=BluetoothAdapter.getDefaultAdapter();
最终长时间释放\u ms=System.currentTimeMillis()+10000;
if(myBTAdapter!=null)
{
字符串sOldName=myBTAdapter.getName();
if(sOldName.equalsIgnoreCase(sNewName)==false)
{
最终处理程序myTimerHandler=新处理程序();
myBTAdapter.enable();
myTimerHandler.postDelayed(
新的Runnable()
{
@凌驾
公开募捐
{
if(myBTAdapter.isEnabled())
{
myBTAdapter.setName(sNewName);
if(sNewName.equalsIgnoreCase(myBTAdapter.getName()))
{
Log.i(TAG_模块,“将BT名称更新为”+myBTAdapter.getName());
myBTAdapter.disable();
}
}
if((sNewName.equalsIgnoreCase(myBTAdapter.getName())==false)和&(System.currentTimeMillis()
要正确更改蓝牙名称,您需要注意以下事项:

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 broadcast,并使用bluetooth adapter.EXTRA_state在蓝牙状态更改时获取蓝牙的新状态


注意:并非所有设备在蓝牙和因缓存和硬件地址而更改名称时都表现相同,因此不要期望所有设备都有相同的结果。

这似乎可行,但也似乎存在一些缓存问题(即,连接的设备总是有旧名称)。如果有人遇到这个问题,进入手机蓝牙设置并查看设备,这似乎会清除缓存,让男人永远不会太晚说谢谢你的帖子。它保存了我的培根,除了我没有注意到你在重命名适配器时关于禁用BT的警告。啊!文档中提供了一些对未来读者可能有用的补充内容,说明:
使用UTF-8编码的有效蓝牙名称最多为248字节,尽管许多远程设备只能显示前40个字符,有些可能仅限于20个。
此外,它还需要权限“android.permission.BLUETOOTH_ADMIN”这不适用于三星设备。当我打开BLUETOOTH设置时,它会被更改回“关于手机”下的设备名称。