1. 应用startAbility跨设施启动Ability
    谬误案例:

    像这样子设置Operation的AbilityName参数是谬误的,如下是正确的形式。

    这两个写法的区别在于谬误写法是把AbilitySlice的名称当做AbilityName,在函数withAbilityName中只能填写Ability的名称,至于要具体启动那个AbilitySlice能够有两种办法来管制,一种是通过传参在Ability中的onStart办法中判断具体要启动哪个AbilitySlice,另一种是官网文档中提到的,如下图,文档地址是https://developer.harmonyos.c...


  1. 获取设施的udid中遇到的坑
    在官方论坛中有个很不便的办法获取udid,文档地址https://developer.huawei.com/...
    然而我在具体应用时遇到了一种状况,就是有开启近程模拟器的状况下,用usb连贯真机获取udid时无奈获取udid,具体的提醒语error:more than one device/emulator

    这个的意思是有多个设施,起因是因为这是不仅连贯了鸿蒙真机还有近程模拟器,只须要将模拟器关掉即可。
  2. 提醒谬误Only page can set main route
    在Ability的子类中应用setMainRoute设置默认启动AbilitySlice时报错only page can set main route,这是因为误将config.json配置文件中对应的Ability的type设置成了service,应该改成page类型才可能失常运行。
  3. 如何同步实时将A设施的输出同步到B设施?
    计划:A设施的FA连贯B设施的PA将A设施的输出内容实时得传输到(B)PA,而后(B)PA操作B设施的FA实现两部设施的输出内容实时同步。该计划也同样实用于同步拖动ScrollView组件。
  4. 一次申请多个动静权限
    一次要申请多种权限时不要用循环申请的形式,而是间接放在数组中集中申请。如下图。
  5. 利用鸿蒙零碎的AI能力(通用文字辨认)辨认身份证上的信息
    鸿蒙零碎有很多有用的AI能力能够疾速实现很多性能,例如:辨认身份证上的名字、身份证号码、住址等,话不多说上代码

    private void IDCardOcrDiscern(PixelMap pixelMap){

    AbilitySlice context = this;
    ConnectionCallback connectionCallback = new ConnectionCallback() {

      @Override  public void onServiceConnect() {      ITextDetector textDetector = VisionManager.getTextDetector(context);      VisionImage image = VisionImage.fromPixelMap(pixelMap);      ohos.ai.cv.text.Text text = new ohos.ai.cv.text.Text();      TextConfiguration.Builder builder = new TextConfiguration.Builder();      builder.setProcessMode(VisionConfiguration.MODE_IN);      builder.setDetectType(TextDetectType.TYPE_TEXT_DETECT_FOCUS_SHOOT_EF);      builder.setLanguage(TextConfiguration.CHINESE);      TextConfiguration configuration = builder.build();      textDetector.setVisionConfiguration(configuration);      int result = textDetector.detect(image,text,null);      if (result != 0) {          return;      }      List<TextBlock> list = text.getBlocks();      if (list.size() == 0) {          return;      }      TextBlock textBlock = list.get(0);      List<TextLine> arrayList = textBlock.getTextLines();      if (arrayList.size() == 0) {          return;      }      String name = "";      String addr = "";      String IDNo = "";      String nameFlag = "姓名";      String addrFlag = "住址";      String codeFlag = "公民身份号码";      boolean firstAddrShow = false;      for (TextLine textLine :arrayList ) {          int i = arrayList.indexOf(textLine);          String str = textLine.getValue();          if (str.indexOf(nameFlag) > -1) {              name = str.replace(nameFlag,"");          } else if (str.indexOf(addrFlag) > -1) {              addr += str.replace(addrFlag,"");              firstAddrShow = true;          } else if (firstAddrShow) {              firstAddrShow = false;              addr += str.replace(";","");          } else if (str.indexOf(codeFlag) > -1) {              IDNo = str.replace(codeFlag,"");          }      }  }

    };
    }