OpenHarmony如何修改设备名称
需求场景:有部分场景需要修改设备名称,用于设备名称展示和 xts 送测等场景。 需求分析:修改设备名称的入口在设置-关于设备-设备名称,同理在设置-蓝牙中开启蓝牙也会有设备名称入口。 1.Settings 源码的 DeviceName.ets 中 @StatedeviceName: string = AboutDeviceModel.getSystemName(); TextInput({ tex
需求场景:有部分场景需要修改设备名称,用于设备名称展示和 xts 送测等场景。
需求分析:修改设备名称的入口在设置-关于设备-设备名称,同理在设置-蓝牙中开启蓝牙也会有设备名称入口。
1.Settings 源码的 DeviceName.ets 中
@State deviceName: string = AboutDeviceModel.getSystemName();
TextInput({ text: this.deviceName })
2.默认值:AboutDeviceModel.getSystemName() 从 settingsData 中获取,当 settingsData 中拿不到值时,则显示为 DEVICE_NAME = ‘OpenHarmony 2.0 Canary’;
/**
* Get system name from SettingsData
*/
@Log
@CatchError(ConfigData.DEVICE_NAME)
getSystemName() {
let context = GlobalContext.getContext().getObject(GlobalContext.globalKeySettingsAbilityContext) as common.Context;
let deviceName = settings.getValueSync(context, ConfigData.SETTINGSDATA_DEVICE_NAME, ConfigData.DEVICE_NAME);
return deviceName;
}
SETTINGSDATA_DEVICE_NAME = settings.general.DEVICE_NAME;
DEVICE_NAME = ‘OpenHarmony 2.0 Canary’;
3.如果需要配置默认值则需要匹配到 SettingsData 中的 settings.general.DEVICE_NAME。
SettingsData 中 SettingsDBHelper.ets 代码如下:
let tableName: string = this.getTableName(TableType.SETTINGS, this.DEFAULT_USER_ID);
// 初始化设备名称
let deviceName: string = deviceInfo.marketName;
if (deviceName.startsWith('"') && deviceName.endsWith('"')) {
deviceName = JSON.parse(deviceName);
}
await this.loadTableSettings(settings.general.DEVICE_NAME, deviceName, tableName);
4.实际读得是 deviceInfo.marketName 得默认值,其对应的属性为 const.product.name。
./startup/init/interfaces/innerkits/syspara/parameter.c:137: return GetProperty(“const.product.name”, &marketName);
修改此属性为想要的设备名称即可。
./startup/init/services/etc/param/ohos.para:22:const.product.name=”OpenHarmony 3.2”
5.开发版中替换验证,可以在./etc/param/ohos.para 中修改 const.product.name。重启即可生效。
6.同理在设置的蓝牙目录这一块也是可以显示设备名称。当在配置中修改默认值或手动修改设备名称后,再搜索蓝牙即可方便快捷的找到对应的设备。
registerBluetoothStateObserver(callback: (data: boolean) => void) {
LogUtil.debug(`${this.TAG} subscribeStateChange call`)
bluetooth.on('stateChange', (data) => {
LogUtil.debug(`${this.TAG} subscribeStateChange->stateChange data:${data}`);
switch (data) {
case bluetooth.BluetoothState.STATE_ON:
let deviceName: string = this.getSystemName()
let curDeviceName: string = bluetooth.getLocalName()
LogUtil.debug(this.TAG + "subscribeStateChange get deviceName: " + deviceName + " ; curDeviceName: " + curDeviceName)
if (deviceName !== curDeviceName) {
LogUtil.debug(this.TAG + "subscribeStateChange deviceName != curDeviceName")
bluetooth.setLocalName(deviceName)
}
bluetooth.setBluetoothScanMode(4, 0)
LogUtil.debug(`${this.TAG} subscribeStateChange->stateChange return: true`)
callback && callback(true)
break;
case bluetooth.BluetoothState.STATE_OFF:
LogUtil.debug(`${this.TAG} subscribeStateChange->stateChange return: false`)
callback && callback(false)
break;
default:
break;
}
})
}
7.之前遇到过各种场景导致设备名称不生效的,比如const.product.name属性配置被覆盖,settingsData未安装未被发现等等,如有类似问题可以一一排查。
更多推荐
所有评论(0)