diff --git a/entry/src/main/config.json b/entry/src/main/config.json
index dea06fd537b15581113b4b939f57941c91c71800..d8a32ebe9d7d77da74381b8ddba577dcce425acb 100644
--- a/entry/src/main/config.json
+++ b/entry/src/main/config.json
@@ -8,8 +8,7 @@
},
"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 75a610f80c78c2e67390d529d47b99eb909da603..0367fea88dc5425371f288bb6b25287996588a1d 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 31b6018db3080bf24c11568badd327d2bca6b52f..ce55d48918eb661e6d7efbf60be2e4a0b7e4f1ad 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 ad6d9793474f521edac9d0108f2d790ca875815a..91e35956fd168628400cce0f2ca5e0e890a559a2 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 58982abcd46bcc3684fe705d9a4d82418fef3b4e..ed474a24bff865f175cc27459e2968f76412e254 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;
@@ -34,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;
@@ -52,8 +52,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 +113,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 +155,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 d6f40e969f1b858d2af209dffaa402dde54591de..a1ae538ac727ad8379c2b1723502e778e89df597 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">
+
+
+
+
+