首页 > 解决方案 > 使用 WebRTC 摄像头的 Cordova Android 应用程序出现问题

问题描述

我正在开发一个 Cordova Android 应用程序。最近,我添加了通过 WebRTC API 使用设备摄像头的 vue-qrcode-reader。

我在调试模式下构建应用程序,生成一个名为app-debug.apk.

自从我添加了这个功能,我开始面临几个问题。

  1. 该应用程序在需要时从不要求相机许可。相反,用户必须在 Android 应用管理器中手动切换相机权限。每次安装它都会自动恢复为关闭状态。

  2. 用户无法通过 .apk 文件更新应用程序。它总是因“未安装应用程序”错误而失败。用户必须手动从设备中删除应用程序并安装它。在添加相机功能之前,这个错误没有发生,它总是更新应用程序。

  3. 即使我有两个参数android:allowBackup="true"android:fullBackupContent="true"设置为启用,每个应用程序安装它总是开始“干净”。我使用 WebView localStorage API。同样,在添加相机功能更新或删除应用程序之前,将保持存储数据完好无损。

我生成的AndroidManifest.xml中的用户权限部分如下所示:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CAMERA" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />

更新:添加了cordova plugin list输出和config.xml内容。

科尔多瓦插件列表

cordova-plugin-badge 0.8.8 "Badge"
cordova-plugin-device 2.0.3 "Device"
cordova-plugin-keyboard 1.2.0 "Keyboard"
cordova-plugin-local-notification 0.9.0-beta.3 "LocalNotification"
cordova-plugin-qrscanner 3.0.1 "QRScanner"
cordova-plugin-splashscreen 5.0.3 "Splashscreen"
cordova-plugin-statusbar 2.4.3 "StatusBar"
cordova-plugin-whitelist 1.3.4 "Whitelist"
cordova-plugin-wkwebview-engine 1.2.1 "Cordova WKWebView Engine"
cordova-plugin-wkwebview-file-xhr 2.1.1 "Cordova WKWebView File XHR Plugin"
de.appplant.cordova.plugin.local-notification 0.8.2dev "LocalNotification"

配置文件

<content src="index.html" />
    <plugin name="cordova-plugin-whitelist" spec="1" />
    <!--<plugin spec="https://github.com/katzer/cordova-plugin-local-notifications.git#b8f358e" />-->
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">
        <allow-intent href="market:*" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
    </platform>

    <allow-navigation href="*" />

    <platform name="android">
      <preference name="StatusBarOverlaysWebView" value="false" />
      <preference name="android-minSdkVersion" value="21" />
      <preference name="SplashMaintainAspectRatio" value="true" />
      <preference name="AutoHideSplashScreen" value="true" />
      <preference name="SplashScreenDelay" value="1000"/>
      <splash density="land-hdpi" src="res/screen/android/drawable-hdpi/screen.png" />
      <splash density="land-mdpi" src="res/screen/android/drawable-mdpi/screen.png" />
      <splash density="land-xhdpi" src="res/screen/android/drawable-xhdpi/screen.png" />
      <splash density="land-xxhdpi" src="res/screen/android/drawable-xxhdpi/screen.png" />
      <splash density="land-xxxhdpi" src="res/screen/android/drawable-xxxhdpi/screen.png" />
      <splash density="port-hdpi" src="res/screen/android/drawable-hdpi/screen.png" />
      <splash density="port-mdpi" src="res/screen/android/drawable-mdpi/screen.png" />
      <splash density="port-xhdpi" src="res/screen/android/drawable-xhdpi/screen.png" />
      <splash density="port-xxhdpi" src="res/screen/android/drawable-xxhdpi/screen.png" />
      <splash density="port-xxxhdpi" src="res/screen/android/drawable-xxxhdpi/screen.png" />
      <icon density="ldpi" src="res/icon/android/mipmap-ldpi/ic_launcher.png" />
      <icon density="mdpi" src="res/icon/android/mipmap-mdpi/ic_launcher.png" />
      <icon density="hdpi" src="res/icon/android/mipmap-hdpi/ic_launcher.png" />
      <icon density="xhdpi" src="res/icon/android/mipmap-xhdpi/ic_launcher.png" />
      <icon density="xxhdpi" src="res/icon/android/mipmap-xxhdpi/ic_launcher.png" />
      <icon density="xxxhdpi" src="res/icon/android/mipmap-xxxhdpi/ic_launcher.png" />
    </platform>

    <preference name="UIWebViewBounce" value="false" />
    <preference name="DisallowOverscroll" value="true" />
    <preference name="BackupWebStorage" value="local" />
    <preference name="AutoHideSplashScreen" value="false" />
    <preference name="ShowSplashScreenSpinner" value="false" />
    <preference name="SplashScreenDelay" value="0" />
    <preference name="Suppresses3DTouchGesture" value="true" />
    <preference name="Allow3DTouchLinkPreview" value="false" />
    <preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />
    <preference name="AllowInlineMediaPlayback" value="true" />

标签: androidcordovawebrtcandroid-webview

解决方案


推荐阅读