Android 爱奥尼亚创造者&x2B;Cordova条形码扫描仪写入:错误

Android 爱奥尼亚创造者&x2B;Cordova条形码扫描仪写入:错误,android,cordova,ionic-framework,barcode-scanner,Android,Cordova,Ionic Framework,Barcode Scanner,我已经编写了一个非常简单的离子包(作为测试的一部分)来启动条形码扫描仪 我已经安装了cordova插件条码扫描器,并且正在使用以下工具 $scope.scanBarcode = function() { $cordovaBarcodeScanner .scan() .then(function(barcodeData) { alert(barcodeData); }, function(error) { alert(e

我已经编写了一个非常简单的离子包(作为测试的一部分)来启动条形码扫描仪

我已经安装了cordova插件条码扫描器,并且正在使用以下工具

$scope.scanBarcode = function() {

    $cordovaBarcodeScanner
      .scan()
      .then(function(barcodeData) {
        alert(barcodeData);
      }, function(error) {
        alert(error);
      });
}
然后我有一个非常简单的问题

<button ng-click="scanBarcode()">Scan</button>
扫描
我已经编译了应用程序,生成了我的apk,安装在设备上,确认该应用程序已启用摄像头(和存储)权限

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

写入设置:false

我不知道从哪里开始,因为条形码扫描仪没有具体的错误文档


在编译应用程序后,我已经能够在ionic creator上使用cordova插件相机ok了。

事实上,我也遇到了这个问题,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));
      }
  }
所以我认为我们需要通知插件的创建者或者提交一个修复程序

暂时你可以做的是,你可以绕过它,对我共享的整个区块进行注释。似乎它在我这边起作用,但没有检查代码中是否实际使用了它。为什么一定要叫它

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

A.在AndroidManifest.xml中包括:

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

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

target=android-23

从SDK-25及以上版本可以看出,一些cordova插件存在问题。我通过更改project.properties文件解决了问题

target=android-25

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


应用程序一建成,条形码阅读器就工作得很好,我也遇到了这个错误,通过将cordova插件条形码扫描仪从版本
0.7.1
恢复到版本
0.7.0


希望这能帮别人省去我在试图修复此错误时所经历的几个小时的挫折。

我所做的大部分工作都没有成功,但是我已经解决了这个问题,我将在下文中记录下来。感谢您提供的详细信息,我没有更改插件本身,但是,也许你可以将你的发现提交给GIT回购协议?我已经在cordova GIT上链接了这个问题,以供参考,因为你的工作似乎无效。接受这个答案,因为我的答案是一个解决办法,而不是一个解决办法,你可能想在你的答案中包括这个解决办法,以使任何有这个问题的人都能更完整地回答hi@Prasobh.K,它实际上是project.properties。。它在平台/android中。。在项目中添加android平台时。
target=android-25
target=android-23