当前位置: 首页 > article >正文

【每日学点鸿蒙知识】worker线程数量、判断用户是否进行权限决定、图片上传类型错误、request锁释放时机、H5问题

1、HarmonyOS 怎么判断worker线程创建了几个?

因为有数量限制,所以想查询当前的worker数量,避免创建失败,还有,是同时运行的worker数量有限制,还是同一个应用能创建的worker线程有限制

1、查询当前的worker数量,这个目前没有接口调用,可以通过ps查看 ;
2、同一进程下能创建的worker线程有限制,如果worker线程达到上限了,调用terminate销毁一个,可以再创建

2、HarmonyOS 在权限判断中,是否可以判断用户尚未进行过权限决定?

只有俩种状态:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-abilityaccessctrl-V5#grantstatus

GrantStatus 表示授权状态的枚举。

名称说明
PERMISSION_DENIED-1表示未授权。
PERMISSION_GRANTED0表示已授权。
3、HarmonyOS 配置应用信息一致提示图片上传类型错误?

1、图片格式可能不对,需要再转换一次,png或者jgp格式图片,这样格式校验就可以了;
2、图片的分辨率可能不合适,这边的建议是要保证16:9的分辨率;

4、HarmonyOS ArkTS Utils.locks.AsyncLock.request添加的锁在什么时候会释放?

1.添加的锁在闭包结束的时候会释放。
2.当前暂无主动释放锁的方法
异步锁是基于微任务队列的,虽然锁被释放了,但它必须等待其他微任务完成,,可以将任务分开

5、HarmonyOS ArkWeb 嵌入H5页面,原有的功能未能实现?

1、在嵌入的页面上,通过a标签调起电话功能,在HarmonyOS的webview里面能否直接生效
2、input标签调起相册选择图片,在HarmonyOS的webview里面能否直接生效

  1. 对于第一个问题请参考以下代码:
// xxx.ets
import web_webview from '@ohos.web.webview';
import call from '@ohos.telephony.call';

@Entry
@Component
struct WebComponent {
  webviewController: web_webview.WebviewController = new web_webview.WebviewController();

  build() {
    Column() {
      Web({ src: $rawfile('call.html'), controller: this.webviewController })
        .onLoadIntercept((event) => {
          if (event) {
            let url: string = event.data.getRequestUrl();
            // 判断链接是否为拨号链接
            if (url.indexOf('tel://') === 0) {
              // 跳转拨号界面
              call.makeCall(url.substring(6), (err) => {
                if (!err) {
                  console.info('make call succeeded.');
                } else {
                  console.info('make call fail, err is:' + JSON.stringify(err));
                }
              });
              return true;
            }
          }
          return false;
        })
    }
  }
}
  1. 对于第二个问题,请参考以下代码:
@Entry
@Component
struct photo {
  controller: web_webview.WebviewController = new web_webview.WebviewController();
  @State webPickImage: pickImage = new pickImage();
  @State webCameraImage: cameraImage = new cameraImage();

  aboutToAppear() {
    // 配置Web开启调试模式
    web_webview.WebviewController.setWebDebuggingAccess(true);
  }

  build() {
    Column() {
      Button('refresh')
        .onClick(() => {
          try {
            this.controller.refresh();
          } catch (error) {
            let e: business_error.BusinessError = error as business_error.BusinessError;
            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
          }
        })
      Button('Register JavaScript To Window')
        .onClick(() => {
          try {
            this.controller.registerJavaScriptProxy(this.webPickImage, "pickImageName", ["testPickImage"]);
            this.controller.registerJavaScriptProxy(this.webCameraImage, "cameraImageName", ["testCameraImage"]);
          } catch (error) {
            let e: business_error.BusinessError = error as business_error.BusinessError;
            console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);
          }
        })
      Web({ src: $rawfile('Test1128.html'), controller: this.controller })
        .javaScriptAccess(true)
    }
  }
}

class pickImage {
  constructor() {
  }

  testPickImage(): string {
    try {

      let PhotoSelectOptions = new picker.PhotoSelectOptions();
      PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
      PhotoSelectOptions.maxSelectNumber = 5;
      let photoPicker = new picker.PhotoViewPicker();
      photoPicker.select(PhotoSelectOptions).then((PhotoSelectResult: picker.PhotoSelectResult) => {
        console.info('PhotoViewPicker.select successfully, PhotoSelectResult uri: ' +
        JSON.stringify(PhotoSelectResult));
      }).catch((err: BusinessError) => {
        console.error('PhotoViewPicker.select failed with err: ' + JSON.stringify(err));
      });
    } catch (error) {
      let err: BusinessError = error as BusinessError;
      console.error('PhotoViewPicker failed with err: ' + JSON.stringify(err));
    }
    return '121';

  }
}

class cameraImage {
  constructor() {
  }

  testCameraImage(): string {
    const context = getContext(this) as common.UIAbilityContext
    context.startAbilityForResult({
      action: "ohos.want.action.imageCapture",
      parameters: {
        callBundleName: "com.hm.imageshow"
      }
    }, (err, data) => {
      console.info("imageCapture:" + `${JSON.stringify(data)}`)
    })
    return '1221';
  }
}

http://www.kler.cn/a/457508.html

相关文章:

  • Linux硬盘分区 --- 挂载分区mount、卸载分区umount、永久挂载
  • 聆听音乐 1.5.9 | 畅听全网音乐,支持无损音质下载
  • 设计模式 创建型 原型模式(Prototype Pattern)与 常见技术框架应用 解析
  • 解決當前IP地址僅適用於本地網路
  • 全国城市经纬度--包括省会(直辖市)、地级市
  • 2024年大型语言模型(LLMs)的发展回顾
  • Zynq PS端外设之中断控制器
  • FFmpeg来从HTTP拉取流并实时推流到RTMP服务器
  • 自学记录鸿蒙API 13:实现智能文本识别Core Vision Text Recognition
  • Django中使用 `formfield_for_choice_field` 和 `get_form` 方法自定义管理后台表单
  • 26、使用StreamPark管理Flink作业中,关于flink on k8s部分的提交处理
  • driftingblues6靶机
  • Oracle数据库高级应用与优化策略
  • 2-194基于matlab的四足机器人行走程序设计
  • [ffmpeg]编译 libx264
  • FFmpeg:详细安装教程与环境配置指南
  • 【Rust自学】7.4. use关键字 Pt.1:use的使用与as关键字
  • 基于Python的企业招聘管理系统
  • UniApp 打开文件工具,获取文件类型,判断文件类型
  • QT中使用OpenGL function
  • uDDS源程序subscriber
  • Web漏洞知识梳理笔记--XSS漏洞原理、类型、危害、利用方式、权限维持、防御措施等
  • 【已解决】“Content-Security-Policy”头缺失
  • C++ 设计模式:建造者模式(Builder Pattern)
  • SpringBoot和SpringCloud对应版本
  • Django Admin 中实现动态表单:无 JavaScript 解决方案