一个小白曾经踩过的坑|一个小白曾经踩过的坑,鸿蒙篇
- 使用startAbility跨设备启动Ability
错误案例:
文章图片
像这样子设置Operation的AbilityName参数是错误的,如下是正确的方式。
文章图片
这两个写法的区别在于错误写法是把AbilitySlice的名称当做AbilityName,在函数withAbilityName中只能填写Ability的名称,至于要具体启动那个AbilitySlice可以有两种方法来控制,一种是通过传参在Ability中的onStart方法中判断具体要启动哪个AbilitySlice,另一种是官方文档中提到的,如下图,文档地址是https://developer.harmonyos.c...
文章图片
文章图片
- 获取设备的udid中遇到的坑
在官方论坛中有个很方便的方法获取udid,文档地址https://developer.huawei.com/...
但是我在具体使用时遇到了一种情况,就是有开启远程模拟器的情况下,用usb连接真机获取udid时无法获取udid,具体的提示语error:more than one device/emulator
文章图片
这个的意思是有多个设备,原因是因为这是不仅连接了鸿蒙真机还有远程模拟器,只需要将模拟器关掉即可。 - 提示错误Only page can set main route
在Ability的子类中使用setMainRoute设置默认启动AbilitySlice时报错only page can set main route,这是因为误将config.json配置文件中对应的Ability的type设置成了service,应该改成page类型才能够正常运行。 - 如何同步实时将A设备的输入同步到B设备?
方案:A设备的FA连接B设备的PA将A设备的输入内容实时得传输到(B)PA,然后(B)PA操作B设备的FA实现两部设备的输入内容实时同步。该方案也同样适用于同步拖动ScrollView组件。 - 一次申请多个动态权限
一次要申请多种权限时不要用循环申请的方式,而是直接放在数组中集中申请。如下图。
文章图片
- 利用鸿蒙系统的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
list = text.getBlocks(); if (list.size() == 0) { return; } TextBlock textBlock = list.get(0); List 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,""); } } }
};
}
文章图片
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 一个人的碎碎念
- 七年之痒之后
- 我从来不做坏事
- 异地恋中,逐渐适应一个人到底意味着什么()
- 迷失的世界(二十七)
- live|live to inspire 一个普通上班族的流水账0723
- 遗憾是生活的常态,但孝顺这件事,我希望每一个人都不留遗憾
- NO.38|NO.38 我不是嫁不出去,而是不想嫁