首页 文章

Ionic Creator Cordova条码扫描器写:false

提问于
浏览
1

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

我已经安装了cordova-plugin-barcodescanner并使用了以下内容

$scope.scanBarcode = function() {

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

然后我有一个非常简单的

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

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

当我单击扫描按钮时,会发出错误

write settings: false

我无法开始,因为barcodescanner没有特定的错误文档 .

只是建议我在编译应用程序后能够使用cordova-plugin-camera确定离子创建器 .

3 回答

  • 0

    其实我也遇到过这个问题,它可能会发生在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));
          }
      }
    

    所以我认为我们需要通知插件创建者或提交一个修复程序 .

    Temporarily what you can do is either you by pass it, by commenting the whole block I shared. 好像是's working from my side, haven' t检查它是否实际用于代码中的某处 . 为什么必须调用它 .

    Another proper way, which is to enhance the code by implementing the following:

    A.包含在AndroidManifest.xml中:

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

    B.允许或要求用户通过调用所需的意图来允许写入设置:

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

    UPDATE

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

    target=android-23
    
  • 3

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

    target=android-25
    

    target=android-23
    

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

    一旦构建了应用程序,条形码阅读器就可以正常工作

  • 0

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

    希望这可以节省一些人,我试图解决这个错误的挫折时间 .

相关问题