相机在 Monaca Debugger 中有效,但在 Debug Build 中无效

Posted

技术标签:

【中文标题】相机在 Monaca Debugger 中有效,但在 Debug Build 中无效【英文标题】:Camera works in Monaca Debugger but not in Debug Build 【发布时间】:2020-01-10 07:43:57 【问题描述】:

所以,我正在开发一个新应用,该应用使用摄像头在 android 上进行实时视频 OCR。无论如何,该应用程序在 Monaca 调试器中运行良好。然后当我进行调试或发布构建时,相机将无法工作。

在初始加载时,应用会提示允许摄像头,但即使在点击允许后,权限响应也会被永久拒绝。我已经尝试过 Android 权限插件、诊断插件和自定义配置插件,但都无法解决这个问题,或者我没有正确使用它们。

在调试器中使用该应用程序时,我会收到 2 个权限的提示,这两个权限都与相机或存储有关,但在调试版本中,我只获得相机的权限。这是初步检查:

ons.ready(function() 
  cordova.plugins.diagnostic.isCameraPresent(function(present)
        console.log("Camera is: "+present)
        if(present) 
          cordova.plugins.diagnostic.isCameraAuthorized(
              successCallback: function(authorized)
                  if (authorized)
                    showToast("App is authorized access to the camera","green");
                   else 
                    setPermissions();
                  
              ,
              errorCallback: function(error)
                  console.error("The following error occurred: "+error);
              , 
              externalStorage: true
          );
         else
            document.getElementById('msg').innerhtml='Camera is not present.';
    , function(error)
        console.log('The following error occurred: '+error);
    );
);

function setPermissions()
  cordova.plugins.diagnostic.requestCameraAuthorization(
      successCallback: function(status)
          showToast("Authorization request for camera use was " + (status == cordova.plugins.diagnostic.permissionStatus.GRANTED ? "granted":"denied"),(status == cordova.plugins.diagnostic.permissionStatus.GRANTED ? "green":"red"));
      ,
      errorCallback: function(error)
          console.error(error);
      ,
      externalStorage: true
  );

【问题讨论】:

【参考方案1】:

我使用 Cordova-Custom-Config 插件解决了这个问题。我过去曾尝试过,但我猜没有仔细阅读文档。您需要以下内容:

<widget xmlns:android="http://schemas.android.com/apk/res/android">
<platform name="android">
    <custom-config-file target="AndroidManifest.xml" parent="/*">
        <uses-permission android:name="android.permission.CAMERA" />
    </custom-config-file>
</platform>

这解决了发布版本中的权限问题。

【讨论】:

以上是关于相机在 Monaca Debugger 中有效,但在 Debug Build 中无效的主要内容,如果未能解决你的问题,请参考以下文章

Monaca 应用程序在仪表板预览中工作,但不适用于 Android 6 手机

仅当启用 react-native-debugger 时,带有标头的 axios 请求才有效

如何共享 Monaca Cloud IDE 代码?

Onsen 2 - Monaca CLI - Cordova 插件 BarcodeScanner

Monaca:使用 Onesignal 在 Android 中自定义通知声音和小图标

在 ios 应用中使用 Monaca 版本