更新:
也许自2023年3月21日的更新以来,它现在可以工作了,也可能不行。 如果您想使用它,可以在文档中了解更多信息。
请再次注意,我们还没有测试它是否可以工作。我们必须迅速决定如何使条形码扫描再次工作。因此,我们重构了我们的自定义条形码扫描 Capacitor 插件,改用com.google.mlkit:barcode-scanning:17.1.0
。有关更多信息,请参见此处。这需要更多的努力,因为您必须自己实现 UI 并且花哨的扫描动画已经消失了,但它只是有效的,并且似乎更快。
我们正在使用 com.google.android.gms:play-services-code-scanner:16.0.0-beta3
与自定义的 Capacitor 插件结合使用,用于扫描 EAN-13 和 EAN-8 等条形码,但在某些设备上,当用户尝试打开 Google 的条形码扫描器 UI 时,活动似乎会崩溃。
这是来自 logcat 的 错误日志:
win=Window{f8c052d u0 com.[redacted]/com.google.mlkit.vision.codescanner.internal.GmsBarcodeScanningDelegateActivity} destroySurfaces: appStopped=true cleanupOnResume=false win.mWindowRemovalAllowed=false win.mRemoveOnExit=false win.mViewVisibility=4 caller=com.android.server.wm.ActivityRecord.destroySurfaces:6529 com.android.server.wm.ActivityRecord.destroySurfaces:6510 com.android.server.wm.ActivityRecord.notifyAppStopped:6574 com.android.server.wm.ActivityRecord.activityStopped:7162 com.android.server.wm.ActivityClientController.activityStopped:258 android.app.IActivityClientController$Stub.onTransact:613 com.android.server.wm.ActivityClientController.onTransact:136
处理扫描界面的代码:
package com.[redacted];
import com.getcapacitor.JSObject;
import com.getcapacitor.Plugin;
import com.getcapacitor.PluginCall;
import com.getcapacitor.PluginMethod;
import com.getcapacitor.annotation.CapacitorPlugin;
import com.google.mlkit.vision.barcode.common.Barcode;
import com.google.mlkit.vision.codescanner.GmsBarcodeScannerOptions;
import com.google.mlkit.vision.codescanner.GmsBarcodeScanning;
@CapacitorPlugin()
public class BarcodeScanner extends Plugin {
private void scan() {
GmsBarcodeScannerOptions options = new GmsBarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_EAN_13, Barcode.FORMAT_EAN_8, Barcode.FORMAT_CODE_128, Barcode.FORMAT_ITF)
.allowManualInput()
.build();
GmsBarcodeScanning
.getClient(getContext(), options)
.startScan()
.addOnSuccessListener(this::onSuccess);
}
private void onSuccess(Barcode result) {
JSObject jsObject = new JSObject();
jsObject.put("content", result.getDisplayValue());
jsObject.put("format", result.getFormat());
this.getSavedCall().success(jsObject);
}
@PluginMethod
public void startScan(PluginCall call) {
this.saveCall(call);
this.scan();
}
}
版本
minSdkVersion = 23
compileSdkVersion = 33
targetSdkVersion = 33
androidxActivityVersion = '1.6.1'
androidxAppCompatVersion = '1.6.1'
androidxCoordinatorLayoutVersion = '1.2.0'
androidxCoreVersion = '1.9.0'
androidxFragmentVersion = '1.5.5'
coreSplashScreenVersion = '1.0.0-rc01'
androidxWebkitVersion = '1.6.0'
junitVersion = '4.13.2'
androidxJunitVersion = '1.1.5'
androidxEspressoCoreVersion = '3.5.1'
cordovaAndroidVersion = '10.1.1'
我们已经将Android Webview更新到最新版本,并更新了应用程序中的任何实现包和Capacitor插件的
build.gradle
文件。由于错误描述非常模糊,我们不知道是什么原因导致了该错误。我们无法在任何地方找到解决方案。这个错误发生在Galaxy Tab S7上,在那里它以前可以工作。它突然停止工作,可能是因为我们不知道任何内部更新。我们还尝试使用三星Galaxy A51进行测试,但在那台设备上它可以正常工作。
com.google.mlkit:barcode-scanning:17.1.0
。 更多信息请查看此处。 这需要更多的努力,因为您必须自己实现 UI 并且漂亮的扫描动画已经消失,但它完美地工作并且比我在帖子中提到的那个更快。 - fruityloopscom.google.mlkit:barcode-scanning:17.1.0
。 - fruityloops