【每日学点鸿蒙知识】大图性能问题、WebView加载网页问题、H5页面数据更新问题、安全控件位置影响数据保存、企业内部应用发布
1、Image大图使用了.blur会有性能问题,有没有平替方案?
参考demo:
async aboutToAppear(): Promise<void> {
let OutData: http.HttpResponse
http.createHttp().request("http:myURL.jpg",
(error: BusinessError, data: http.HttpResponse) => {
if (error) {
console.error(`http reqeust failed with. Code: ${error.code}, message: ${error.message}`);
} else {
OutData = data
let code: http.ResponseCode | number = OutData.responseCode
if (http.ResponseCode.OK === code) {
let imageData: ArrayBuffer = OutData.result as ArrayBuffer;
let imageSource = image.createImageSource(imageData.slice(0));
imageSource.createPixelMap().then(async pixelMap => {
let radius = 15;
let headFilter = effectKit.createEffect(pixelMap);
if (headFilter != null) {
headFilter.blur(radius);
}
this.img = await headFilter.getEffectPixelMap();
})
}
}
2、HarmonyOS WebviewController 加载的网页不显示?
controller: web_webview.WebviewController = new web_webview.WebviewController()
onPageShow() {
const params:Params = router.getParams() as Params; // 获取传递过来的参数对象
if (params) {
let resultJson: Params = new Params();
resultJson.item=params.item;
this.AdData=resultJson.item
this.url=this.AdData.ad_url
console.info('http opageshow:' + this.url);
//日志 http opageshow: https://www.huawei.com/
}
}
build() {
Column() {
this.Title()
Web({src:this.url, controller: this.controller })
// Web({ src: 'https://www.huawei.com', controller: this.controller })
// 这样可以显示。是哪里不对?
}
.width(CommonConstants.FULL_WIDTH)
.height(CommonConstants.FULL_HEIGHT)
.backgroundColor($r('app.color.page_background'))
}
从代码里看到渲染web是在build方法内,而获取url是在onPageShow方法内,由于build先于onPageShow执行,因此加载web时并没有获取到url,应该在 aboutToAppear方法内获取url,这样即可正确加载
3、使用webview组件时,怎么清空H5页面的localstorage数据,混合开发的场景,切换账号后,H5页面的数据没更新
removeCache清除应用中的资源缓存文件,此方法将会清除同一应用中所有webview的缓存文件。参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-webview-V5#removecache
4、HarmonyOS savebutton的使用影响图片保存?
savebutton位置影响保存功能,SaveButton和Text的位置互换,会影响保存的功能。
Row() {
SaveButton({ text: SaveDescription.SAVE, buttonType: ButtonType.Normal })
.fontColor(Color.White)
.backgroundColor(Color.Black)
.width(100)
.onClick(async () => {
if (this.imgBuffersMap.get(this.selectedIndex - 1)) {
this.saveImage(this.imgBuffersMap.get(this.selectedIndex - 1)).then(() => {
promptAction.showToast({
message: $r("app.string.saveImgSuccess"),
duration: 2000
})
}).catch(() => {
promptAction.showToast({
message: $r("app.string.saveImgFail"),
duration: 2000
})
})
}
})
Text(this.selectedIndex + "/" + this.imgUrls.length)
.fontColor(Color.White)
.fontSize(FontSizeUtil.getFontSize(15))
.padding({ right: adapt(20) })
}
.width("100%")
.justifyContent(FlexAlign.SpaceBetween)
.padding({ bottom: adapt(30) })
当前控件要求:安全控件不能放到屏幕边缘,如果超出屏幕范围一点也会失败。请参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/security-component-overview-V5#ZH-CN_TOPIC_0000001884756418__%E7%BA%A6%E6%9D%9F%E4%B8%8E%E9%99%90%E5%88%B6
运作机制如下:
开发者调用接口时,运作流程如图所示。
- 应用开发者在ETS文件中集成安全控件,通过JS引擎解析后,在ArkUI框架中生成具体的控件。
- 安全控件注册控件信息到安全控件管理服务,安全控件管理服务检查控件信息的合法性。
- 用户点击事件分发到安全控件。
- 安全控件将点击事件上报到安全控件管理服务。
- 安全控件管理服务根据控件种类对应不同权限,调用权限管理服务进行临时授权。
- 授权成功后,安全控件回调OnClick通知应用层授权成功。
- 应用调用相应的特权操作,如获取地理位置、读取剪贴板信息、媒体库中创建文件等。
- 不同类型的安全控件,对于权限的使用方式不同、授权的有效期也不同,详情请查阅具体安全控件的开发指导。
- 对应的服务会调用权限管理服务或安全控件管理服务,获取授权结果,返回鉴权结果。
5、HarmonyOS 发布企业内部应用,证书类型没有“组织内部发布证书”这个选项?
发布企业内部应用请参考下面文档,需要注册新账号,不能使用之前的旧账号 参考文档:
https://developer.huawei.com/consumer/cn/doc/app/agc-help-harmonyos-internalrelease-0000001756878768
发布流程: