一个小白曾经踩过的坑,鸿蒙篇

开发过程中遇到的坑

  1. 使用startAbility跨设备启动Ability
错误案例:

 

 

 
像这样子设置OperationAbilityName参数是错误的,如下是正确的方式。
 

 

这两个写法的区别在于错误写法是把AbilitySlice的名称当做AbilityName,在函数withAbilityName中只能填写Ability的名称,至于要具体启动那个AbilitySlice可以有两种方法来控制,一种是通过传参在Ability中的onStart方法中判断具体要启动哪个AbilitySlice,另一种是官方文档中提到的,如下图,文档地址是https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-intent-0000000000038799#ZH-CN_TOPIC_0000001076675608__section854420303150
 

 

 

 
 
 
  1. 获取设备的udid中遇到的坑
在官方论坛中有个很方便的方法获取udid,文档地址https://developer.huawei.com/consumer/cn/forum/topic/0202457480693590847?fid=26
但是我在具体使用时遇到了一种情况,就是有开启远程模拟器的情况下,用usb连接真机获取udid时无法获取udid,具体的提示语error:more than one device/emulator
 

 

这个的意思是有多个设备,原因是因为这是不仅连接了鸿蒙真机还有远程模拟器,只需要将模拟器关掉即可。
  1. 提示错误Only page can set main route
Ability的子类中使用setMainRoute设置默认启动AbilitySlice时报错only page can set main route,这是因为误将config.json配置文件中对应的Abilitytype设置成了service,应该改成page类型才能够正常运行。
 
  1. 如何同步实时将A设备的输入同步到B设备?
方案:A设备的FA连接B设备的PAA设备的输入内容实时得传输到(B)PA,然后(B)PA操作B设备的FA实现两部设备的输入内容实时同步。该方案也同样适用于同步拖动ScrollView组件。
  1. 一次申请多个动态权限
一次要申请多种权限时不要用循环申请的方式,而是直接放在数组中集中申请。如下图。
 

 

  1. 利用鸿蒙系统的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,"");
                    }
                }
            }
 
        };
}

 


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值