如何以编程方式在Android中更改已连接的BLE设备名称?

时间:2015-01-09 07:16:17

标签: android permissions bluetooth bluetooth-lowenergy android-bluetooth

在我的Android应用程序中,BLE连接正常运行,一旦BLE设备连接到Android手机。如何以编程方式更改连接的BLE设备名称?示例代码如下

private static final UUID Device_Name_UUID = UUID.fromString("00002a00-0000-1000-8000-00805f9b34fb");
private static final UUID Write_UUID = UUID.fromString("00001800-0000-1000-8000-00805f9b34fb");

        public void Device_Name(){
            BluetoothGattService Name_Service = mBluetoothGatt.getService(Write_UUID );
            if(Name_Service == null) {
                Log.d(TAG, "Name_Service service not found!");
                return;
            }

            BluetoothGattCharacteristic DeviceName = Name_Service.getCharacteristic(Device_Name_UUID);
            if(DeviceName == null) {
                Log.d(TAG, "DeviceName charateristic not found!");
                return;
            }
        }
        Log.v(TAG, "readCharacteristic(DeviceName) = " + mBluetoothGatt.readCharacteristic(DeviceName));
        String i = "123";       
        DeviceName.setValue(i);
        Log.v(TAG, "writeCharacteristic(DeviceName) = " + mBluetoothGatt.writeCharacteristic(DeviceName));
        Log.v(TAG, "writeCharacteristic(DeviceName) = " + mBluetoothGatt.writeCharacteristic(DeviceName));

此处 mBluetoothGatt.writeCharacteristic(DeviceName); 方法始终返回 false

经过一些研究后我发现了以下解决方案

您需要修改CC2541密钥卡的固件,通过将以下代码添加到keyfobdemo.c中的KeyFobApp_Init()中来添加设备名称的写入权限:

uint8 devNamePermission = GATT_PERMIT_READ|GATT_PERMIT_WRITE; 
GGS_SetParameter( GGS_W_PERMIT_DEVICE_NAME_ATT, sizeof ( uint8 ), &devNamePermission );

现在我的问题是,我们需要添加这些权限吗?

请有人告诉我如何添加这些持续时间吗?

提前致谢

2 个答案:

答案 0 :(得分:3)

如名称所示:keyfobdemo.c是.c文件,因此TI告诉您必须在KeyFobDemo工作区中添加这些权限,因此您必须对CC2541套件进行编程才能更改名称。你不能在Android中做到这一点。

您所要做的就是:

从德州仪器网站下载BLE堆栈: http://www.ti.com/tool/ble-stack

然后在堆栈中打开Projects \ ble \ KeyFob \ CC2541DB \ KeyFobDemo.eww文件。

CC2540套件的编程需要一个名为IAR Embedded Workbench的IDE。您可以下载它并通过30天试用获得访问权限: http://www.iar.com/Products/IAR-Embedded-Workbench/8051/

然后打开项目并在APP文件夹中找到keyfobdemo.c文件。从第200-213行开始,有一个名为deviceName []的char数组,它实际上将广告名称定义为" Keyfobdemo"。您只需要使用正确的十六进制值以及数组的长度将其更改为所需的名称。 然后在第236行,您还必须更改attDeviceName []数组,因为此参数定义了设备处于连接状态时的名称。

答案 1 :(得分:0)

在Android中无法做到这一点!除非你改变你的BLE固件!

可能的解决方案,一旦连接到BLE设备,您就可以向设备发送一些配置命令来更改设备名称。