2017-07-18 31 views
1

我写了一个非常简单的离子包(作为测试的一部分)火起来条形码扫描器离子造物主+科尔多瓦条码扫描器写:假

我已经安装了科尔多瓦 - 插件 - barcodescanner和现在用的是以下

$scope.scanBarcode = function() { 

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

然后我有一个非常简单的

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

我已经编译应用程序,生成APK我的,安装在设备上,确认该应用程序有权限启用d用于相机(和存储)。

当我点击扫描按钮,一个错误射击是

写设置:假

我很茫然哪里开始,因为是barcodescanner没有特定的错误文档。

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

+0

详细博客:http://sforsuresh.in/getting-issue-installation-cordova-barcodescanner-plugin/ –

回答

3

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

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版本,在project.properties改变它:

target=android-23 
+0

我做了大部分的这些没有成功,但是我有固定的问题,我将文档下方 – MOLEDesign

+0

不过谢谢你的细节,我DIDNT改变了插件本身,但也许你可以将你的发现提交给GIT repo? – MOLEDesign

+0

我已经链接到这个问题上的科尔多瓦git作为参考,因为你的工作似乎无价 – MOLEDesign

0

这似乎从SDK-25及以上的一些科尔多瓦插件有问题。我通过改变项目解决了我的问题。属性文件从

target=android-25 

target=android-23 

这也可在24个工作,但我没有那么SDK安装

只要一个内置的应用程序,条形码阅读器工作正常

0

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

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

相关问题