Ionic Creator + Cordova Barcode Scanner 写入:false

Ionic Creator + Cordova Barcode Scanner write : false

我编写了一个非常简单的 Ionic 包(作为测试的一部分)来启动条码扫描器

我已经安装了 cordova-plugin-barcodescanner 并且正在使用以下

$scope.scanBarcode = function() {

    $cordovaBarcodeScanner
      .scan()
      .then(function(barcodeData) {
        alert(barcodeData);
      }, function(error) {
        alert(error);
      });
}

那我就很简单了

<button ng-click="scanBarcode()">Scan</button>

我编译了应用程序,生成了我的 apk,安装在设备上,确认应用程序已启用相机(和存储)权限。

当我点击扫描按钮时,触发了一个错误,即

写入设置:false

我不知道从哪里开始,因为没有针对 barcodescanner 的特定错误文档。

只是提醒一下,在编译应用程序后,我已经能够将 cordova-plugin-camera 与 ionic creator 一起使用。

其实我也遇到过这个问题,Android 6.0及以上版本可能会出现。

在插件内部,以下代码是触发它的代码。

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP + 1) {
      Class systemClass = Settings.System.class;
      try {
          Method canWriteMethod = systemClass.getDeclaredMethod("canWrite", Context.class);
          boolean retVal = (Boolean) canWriteMethod.invoke(null, this.cordova.getActivity());
          Log.d(LOG_TAG, "Can Write Settings: " + retVal);
          if (!retVal && !action.equals("requestWriteSettings") && !action.equals("getWriteSettings")) {
              //can't write Settings
              this.callbackContext.error("write settings: false");
              return false;
          }
          this.writeSettings = retVal;
      } catch (Exception ignored) {
          Log.e(LOG_TAG, "Could not perform permission check");
          this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.ILLEGAL_ACCESS_EXCEPTION));
      }
  }

所以我认为我们需要通知插件创建者或为此提交修复。

暂时你可以做的是绕过它,通过评论我分享的整个块。好像它在我这边起作用,还没有检查这是否是实际上在代码中的某处使用。为什么一定要叫它。

另一种正确的方法,即通过实现以下代码来增强代码:

一个。包含在 AndroidManifest.xml:

<uses-permission android:name="android.permission.WRITE_SETTINGS" />

乙。 allow or ask the user to allow the write settings, by calling the intent needed:

Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + this.cordova.getActivity().getPackageName()));
this.cordova.getActivity().startActivity(intent);

更新

C。这是 MoleDesign 建议的,如以下答案之一所述。另一种解决方法是降低 sdk 版本,在 project.properties 中将其更改为:

target=android-23

SDK-25 及以上版本的一些 cordova 插件似乎有问题。我通过从

更改 project.properties 文件解决了我的问题
target=android-25

target=android-23

这可能也适用于 24,但我没有安装该 SDK

构建应用程序后,条形码 reader 工作正常

我也有这个错误,并设法通过将 cordova-plugin-barcodescanner 从版本 0.7.1 恢复到版本 0.7.0

来修复它

希望这可以让其他人免去我试图修复此错误的挫败感。