























本文原创发布在华为开发者联盟社区,欢迎前往原帖“答开发者问”之HarmonyOS技术问题解析 第19期 ,直接与知识贡献者进行交流。
本期问题如下:
4、如何判断H5页面是通过HarmonyOS的webview打开的?
向所有参与社区互助的开发者致以最诚挚的感谢!
若您在开发中遇到技术问题,欢迎前往问答-我要提问题进行提问。
更快得到问题答案的秘诀我们为您整理好了,点击链接即可获取:提问小技巧
答开发者问系列汇总:
“答开发者问”系列汇总(持续更新中…)
使用usbManager.getDevices获取所有的USB设备信息,那么如何判断是否是存储设备呢,是通过USBEndpoint类型中的type字段吗?端点为2代表批量传输端点,也就是存储设备的意思吗?
解决方案:
let devicesList: Array<usbManager.USBDevice> = usbManager.getDevices();
for (let device of devicesList) {
if (device.clazz === 8) { // 设备类代码为8(Mass Storage Class)
console.info(“发现大容量存储设备(如U盘)”);
// 可进一步检查接口信息确认
let interfaces = device.configs[0]?.interfaces;
for (let iface of interfaces) {
if (iface.clazz === 8) { // 接口类代码同样为8
console.info(“确认是U盘类设备”);
}
}
}
}
原链接:
如何识别判断USB设备是U盘这样的存储设备-华为开发者问答 | 华为开发者联盟 (huawei.com)
如何读取rawfile目录下.db文件中的数据?
解决方案:
参考读写rawfile目录下的文件和如何读取本地/预制数据库。
import { fileIo } from ‘@kit.CoreFileKit’;
import { relationalStore } from ‘@kit.ArkData’;
import { common } from ‘@kit.AbilityKit’;
import { BusinessError } from ‘@kit.BasicServicesKit’;
// 在EntryAbility中获取Context,保存到AppStorage,然后在工具类中使用AppStorage获取
let context = AppStorage.get(‘context’) as UIContext;
let UiAbilityContent = context.getHostContext() as common.UIAbilityContext;
let RDBDirectory = UiAbilityContent.databaseDir;
let resource = UiAbilityContent.resourceManager;
function initDatabase() {
// 创建数据库沙箱目录
try {
let dirPath = RDBDirectory + ‘/entry’;
fileIo.mkdirSync(dirPath);
dirPath = dirPath + ‘/rdb’;
fileIo.mkdirSync(dirPath);
} catch (error) {
console.error(`创建rdbPath目录失败,错误码: ${error.code}, 消息: ${error.message}.`);
}
// 设置数据库名称
let dbName: string = ‘Objective.db’;
// 读取rawfile目录下的数据库文件
try {
let content = resource.getRawFileContentSync(dbName);
let cFile = RDBDirectory + ‘/entry/rdb/’ + dbName;
let cacheFile = fileIo.openSync(cFile, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
fileIo.write(cacheFile.fd, content.buffer);
fileIo.closeSync(cacheFile.fd);
} catch (error) {
console.error(`获取原始文件描述符失败,错误码: ${error.code}, 消息: ${error.message}.`);
}
}
async function getRDB(): Promise<relationalStore.RdbStore | undefined> {
let result: relationalStore.RdbStore | undefined = undefined;
const STORE_CONFIG: relationalStore.StoreConfig = {
name: ‘Objective.db’,
securityLevel: relationalStore.SecurityLevel.S1
};
await relationalStore.getRdbStore(UiAbilityContent, STORE_CONFIG).then((rdbStore: relationalStore.RdbStore) => {
result = rdbStore;
console.info(‘获取RdbStore成功。’);
}).catch((err: BusinessError) => {
console.error(`获取RdbStore失败,错误码: ${err.code}, 消息: ${err.message}`);
});
return result;
}
原链接:
怎么读取rawfile里面的.db文件中的数据?-华为开发者问答 | 华为开发者联盟 (huawei.com)
锁屏卡片的开发文档没有详细的教程,只有一些配置信息,不知道怎么去开发。
解决方案:
锁屏卡片UI开发可以参考ArkTS卡片开发文档,卡片开发好后按照锁屏卡片开发指导文档中的步骤申请锁屏卡片开放能力并在form_config.json配置文件中配置renderingMode和supportDimensions字段即可。
注意:
原链接:
锁屏卡片的开发文档没有详情的教程,不知道怎么开发?-华为开发者问答 | 华为开发者联盟 (huawei.com)
如何判断H5页面是通过HarmonyOS的webview打开的,userAgent是否包含特定字符?
解决方案:
HarmonyOS的webview自带的userAgent 如下:
Mozilla/5.0 (Phone; OpenHarmony 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/4.1.6.1 Mobile
只需要判断是否包含OpenHarmony字符串即可。
原链接:
怎么判断H5页面是通过鸿蒙的webview打开的,userAgent包含特定的字符?-华为开发者问答 | 华为开发者联盟 (huawei.com)
问题五:使用云函数开发作为后端,需要备案吗?
应用后端服务器只做了一次ai大模型的api调用,也可以把大模型api调用改到app中,这样应用就“没有自己服务器”了,但还是联网调用了大模型api。
请问这种方式,或者是使用云函数开发作为后端,app还需要在工信部备案么?
解决方案:
可参考APP备案补充指引(含无需备案的场景,此外其他均需要正常备案),APP备案FAQ。
原链接:
云函数开发作为后端,还需要备案吗?-华为开发者问答 | 华为开发者联盟 (huawei.com)
本文由 @华为开发者联盟 授权发布于人人都是产品经理。未经作者许可,禁止转载
题图来自Unsplash,基于CC0协议
该文观点仅代表作者本人,人人都是产品经理平台仅提供信息存储空间服务
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。