From ccd0fb4dd1db82ae2cb8771f57006cab1c83478a Mon Sep 17 00:00:00 2001 From: 0000248716-lijiaxiao Date: Thu, 10 Jun 2021 10:22:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- entry/src/main/config.json | 5 +- .../main/resources/base/element/string.json | 4 - qrcodescanner/src/main/config.json | 11 +- .../qrcodescanner/decode/QrManager.java | 3 +- .../slice/QrCodeAbilitySlice.java | 156 ++++++++++-------- .../resources/base/layout/ability_qr_code.xml | 32 +++- 7 files changed, 125 insertions(+), 88 deletions(-) diff --git a/build.gradle b/build.gradle index e463f14..83d884f 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.huawei.ohos:hap:2.4.2.7' + classpath 'com.huawei.ohos:hap:2.4.4.2' classpath 'com.huawei.ohos:decctest:1.0.0.6' } } diff --git a/entry/src/main/config.json b/entry/src/main/config.json index 313784d..d8a32eb 100644 --- a/entry/src/main/config.json +++ b/entry/src/main/config.json @@ -3,13 +3,12 @@ "bundleName": "com.blikoon.qrcodescannerlibrary", "vendor": "blikoon", "version": { - "code": 1, + "code": 1000000, "name": "1.0" }, "apiVersion": { "compatible": 5, - "target": 5, - "releaseType": "Release" + "target": 5 } }, "deviceConfig": {}, diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index 75a610f..0367fea 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -15,10 +15,6 @@ { "name": "scannerability_description", "value": "Java_Phone_Empty Feature Ability" - }, - { - "name": "HelloWorld", - "value": "Hello World" } ] } \ No newline at end of file diff --git a/qrcodescanner/src/main/config.json b/qrcodescanner/src/main/config.json index 31b6018..ce55d48 100644 --- a/qrcodescanner/src/main/config.json +++ b/qrcodescanner/src/main/config.json @@ -38,7 +38,16 @@ "description": "$string:qrcodeability_description", "label": "$string:app_name", "type": "page", - "launchType": "standard" + "launchType": "standard", + "metaData": { + "customizeData": [ + { + "extra": "", + "name": "hwc-theme", + "value": "androidhwext:style/Theme.Emui.Light.NoTitleBar" + } + ] + } } ] } diff --git a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/decode/QrManager.java b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/decode/QrManager.java index ad6d979..91e3595 100644 --- a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/decode/QrManager.java +++ b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/decode/QrManager.java @@ -55,7 +55,8 @@ public class QrManager { public void startScan(final Context context, OnScanResultCallback resultCall) { Intent intent = new Intent(); Operation operation = new Intent.OperationBuilder() - .withAction("action.scan") + .withBundleName("com.blikoon.qrcodescannerlibrary") + .withAbilityName("com.blikoon.qrcodescanner.QrCodeAbility") .build(); intent.setOperation(operation); context.startAbility(intent, 0); diff --git a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/slice/QrCodeAbilitySlice.java b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/slice/QrCodeAbilitySlice.java index 58982ab..742c53a 100644 --- a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/slice/QrCodeAbilitySlice.java +++ b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/slice/QrCodeAbilitySlice.java @@ -25,6 +25,7 @@ import com.google.zxing.Result; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.ability.DataAbilityHelper; import ohos.aafwk.content.Intent; +import ohos.aafwk.content.Operation; import ohos.agp.colors.RgbColor; import ohos.agp.components.DependentLayout; import ohos.agp.components.DirectionalLayout; @@ -52,8 +53,11 @@ import ohos.media.image.PixelMap; import ohos.media.image.common.ImageFormat; import ohos.media.photokit.metadata.AVStorage; import ohos.media.player.Player; +import ohos.utils.IntentConstants; import ohos.utils.net.Uri; +import java.io.FileDescriptor; + import static ohos.media.camera.device.Camera.FrameConfigType.FRAME_CONFIG_PREVIEW; /** @@ -110,10 +114,7 @@ public class QrCodeAbilitySlice extends AbilitySlice { DirectionalLayout openLight = (DirectionalLayout) findComponentById(ResourceTable.Id_open_light); Text picture = (Text) findComponentById(ResourceTable.Id_picture); Text des = (Text) findComponentById(ResourceTable.Id_sdt_des); - picture.setClickedListener(v -> { - //picture() - } - ); + picture.setClickedListener(v -> picture()); openLight.setClickedListener(v -> setFlash(des)); ShapeElement viewShape = new ShapeElement(); viewShape.setRgbColor(RgbColor.fromArgbInt(Color.BLACK.getValue())); @@ -155,107 +156,122 @@ public class QrCodeAbilitySlice extends AbilitySlice { /** * 闪光灯 * - * @param des + * @param des text */ public void setFlash(Text des) { - // 获取预览配置模板 - FrameConfig.Builder frameConfigBuilder = myCamera.getFrameConfigBuilder(FRAME_CONFIG_PREVIEW); - // 配置预览Surface - frameConfigBuilder.addSurface(previewSurface); - int flashMode = frameConfigBuilder.getFlashMode(); - if (flashMode == Metadata.FlashMode.FLASH_CLOSE) { - frameConfigBuilder.setFlashMode(Metadata.FlashMode.FLASH_ALWAYS_OPEN); - if (des != null) { - des.setText("Close Flash Light"); - } - } else { - frameConfigBuilder.setFlashMode(Metadata.FlashMode.FLASH_CLOSE); - if (des != null) { - des.setText("Open flash light"); - } - } - // 预览帧变焦值变更 - FrameConfig previewFrameConfig = frameConfigBuilder.build(); try { - // 启动循环帧捕获 + FrameConfig.Builder frameConfigBuilder = myCamera.getFrameConfigBuilder(FRAME_CONFIG_PREVIEW); + frameConfigBuilder.addSurface(previewSurface); + int flashMode = frameConfigBuilder.getFlashMode(); + if (flashMode == Metadata.FlashMode.FLASH_CLOSE) { + frameConfigBuilder.setFlashMode(Metadata.FlashMode.FLASH_ALWAYS_OPEN); + if (des != null) { + des.setText("Close Flash Light"); + } + } else { + frameConfigBuilder.setFlashMode(Metadata.FlashMode.FLASH_CLOSE); + if (des != null) { + des.setText("Open flash light"); + } + } + FrameConfig previewFrameConfig = frameConfigBuilder.build(); myCamera.triggerLoopingCapture(previewFrameConfig); } catch (Exception e) { System.out.println(e); } } - /** - * 关闭闪光灯 - */ public void closeFlash() { - // 获取预览配置模板 - FrameConfig.Builder frameConfigBuilder = myCamera.getFrameConfigBuilder(FRAME_CONFIG_PREVIEW); - // 配置预览Surface - frameConfigBuilder.addSurface(previewSurface); - int flashMode = frameConfigBuilder.getFlashMode(); - if (flashMode == Metadata.FlashMode.FLASH_ALWAYS_OPEN) { - frameConfigBuilder.setFlashMode(Metadata.FlashMode.FLASH_CLOSE); - // 预览帧变焦值变更 - FrameConfig previewFrameConfig = frameConfigBuilder.build(); - try { - // 启动循环帧捕获 + try { + FrameConfig.Builder frameConfigBuilder = myCamera.getFrameConfigBuilder(FRAME_CONFIG_PREVIEW); + frameConfigBuilder.addSurface(previewSurface); + int flashMode = frameConfigBuilder.getFlashMode(); + if (flashMode == Metadata.FlashMode.FLASH_ALWAYS_OPEN) { + frameConfigBuilder.setFlashMode(Metadata.FlashMode.FLASH_CLOSE); + FrameConfig previewFrameConfig = frameConfigBuilder.build(); myCamera.triggerLoopingCapture(previewFrameConfig); - } catch (Exception e) { - System.out.println(e); } + } catch (Exception e) { + System.out.println(e); } } private void picture() { - DataAbilityHelper helper = DataAbilityHelper.creator(this); - try { - // columns为null,查询记录所有字段,当前例子表示查询id字段 - ResultSet resultSet = helper.query(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, - new String[]{AVStorage.Images.Media.ID}, null); - if (resultSet != null || resultSet.goToNextRow()) { - return; + Intent intent = new Intent(); + Operation operation = new Intent.OperationBuilder() + .withAction(IntentConstants.ACTION_CHOOSE) + .build(); + intent.setType("image/*"); + intent.setOperation(operation); + startAbilityForResult(intent, 1); + } + + @Override + protected void onAbilityResult(int requestCode, int resultCode, Intent resultData) { + if (requestCode == 1 && resultData != null) { + String chooseImgUri = resultData.getUriString(); + DataAbilityHelper helper = DataAbilityHelper.creator(getContext()); + ImageSource imageSource = null; + String chooseImgId; + if (chooseImgUri.lastIndexOf("%3A") != -1) { + chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf("%3A") + 3); + } else { + chooseImgId = chooseImgUri.substring(chooseImgUri.lastIndexOf('/') + 1); } - while (resultSet != null && resultSet.goToNextRow()) { - PixelMap pixelMap = null; - ImageSource imageSource = null; - ohos.agp.components.Image image = new ohos.agp.components.Image(this); - image.setWidth(250); - image.setHeight(250); - image.setMarginsLeftAndRight(10, 10); - image.setMarginsTopAndBottom(10, 10); - image.setScaleMode(ohos.agp.components.Image.ScaleMode.CLIP_CENTER); - // 获取id字段的值 - int id = resultSet.getInt(resultSet.getColumnIndexForName(AVStorage.Images.Media.ID)); - Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, String.valueOf(id)); + Uri uri = Uri.appendEncodedPathToUri(AVStorage.Images.Media.EXTERNAL_DATA_ABILITY_URI, chooseImgId); + try { + FileDescriptor fd = helper.openFile(uri, "r"); + imageSource = ImageSource.create(fd, null); + + ImageSource.DecodingOptions options = new ImageSource.DecodingOptions(); + options.allowPartialImage = true; + options.sampleSize = 3; + options.allowPartialImage = false; + PixelMap pixelMap = imageSource.createPixelmap(options); + int width = pixelMap.getImageInfo().size.width; + int height = pixelMap.getImageInfo().size.height; + System.out.println("----------------选择图片:" + width + "----" + height); + byte[] yuv420sp = QrUtils.getYUV420sp(width, height, pixelMap); + Result result = QrUtils.decodeImage(yuv420sp, width, height); + if (null == result) { + QrManager.getInstance().getResultCallback().onScanSuccess("未识别到图片中的二维码,请重试。"); + } else { + QrManager.getInstance().getResultCallback().onScanSuccess(result.getText()); + } + mPlayer.prepare(); + mPlayer.play(); + closeFlash(); + if (myCamera != null) { + myCamera.release(); + myCamera = null; + } + terminate(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (imageSource != null) { + imageSource.release(); + } } - } catch (Exception e) { - e.printStackTrace(); } } public void capture() { getUITaskDispatcher().delayDispatch(() -> { - // 获取拍照配置模板 - frameConfigBuilder = myCamera.getFrameConfigBuilder(Camera.FrameConfigType.FRAME_CONFIG_PICTURE); - // 配置拍照Surface - frameConfigBuilder.addSurface(imageReceiver.getRecevingSurface()); try { - // 启动单帧捕获(拍照) + frameConfigBuilder = myCamera.getFrameConfigBuilder(Camera.FrameConfigType.FRAME_CONFIG_PICTURE); + frameConfigBuilder.addSurface(imageReceiver.getRecevingSurface()); myCamera.triggerSingleCapture(frameConfigBuilder.build()); } catch (Exception e) { - } }, 2000); } - private SurfaceOps.Callback callback = new SurfaceOps.Callback() { @Override public void surfaceCreated(SurfaceOps surfaceOps) { - //将SurfaceProvider中的Surface与previewsurface建立连接 previewSurface = surfaceOps.getSurface(); - //初始化相机 openCamera(); } diff --git a/qrcodescanner/src/main/resources/base/layout/ability_qr_code.xml b/qrcodescanner/src/main/resources/base/layout/ability_qr_code.xml index d6f40e9..a1ae538 100644 --- a/qrcodescanner/src/main/resources/base/layout/ability_qr_code.xml +++ b/qrcodescanner/src/main/resources/base/layout/ability_qr_code.xml @@ -6,15 +6,31 @@ ohos:orientation="vertical" ohos:id="$+id:root_view"> - + ohos:width="match_parent" + ohos:top_padding="5vp" + ohos:bottom_padding="5vp" + ohos:background_element="#696969"> + + + + + Date: Thu, 10 Jun 2021 10:23:07 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/blikoon/qrcodescanner/slice/QrCodeAbilitySlice.java | 1 - 1 file changed, 1 deletion(-) diff --git a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/slice/QrCodeAbilitySlice.java b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/slice/QrCodeAbilitySlice.java index 742c53a..ed474a2 100644 --- a/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/slice/QrCodeAbilitySlice.java +++ b/qrcodescanner/src/main/java/com/blikoon/qrcodescanner/slice/QrCodeAbilitySlice.java @@ -35,7 +35,6 @@ import ohos.agp.components.surfaceprovider.SurfaceProvider; import ohos.agp.graphics.Surface; import ohos.agp.graphics.SurfaceOps; import ohos.agp.utils.Color; -import ohos.data.resultset.ResultSet; import ohos.eventhandler.EventHandler; import ohos.eventhandler.EventRunner; import ohos.global.resource.RawFileDescriptor; -- Gitee