android - 使用 WebRTC 摄像头的 Cordova Android 应用程序出现问题
问题描述
我正在开发一个 Cordova Android 应用程序。最近,我添加了通过 WebRTC API 使用设备摄像头的 vue-qrcode-reader。
我在调试模式下构建应用程序,生成一个名为app-debug.apk
.
自从我添加了这个功能,我开始面临几个问题。
该应用程序在需要时从不要求相机许可。相反,用户必须在 Android 应用管理器中手动切换相机权限。每次安装它都会自动恢复为关闭状态。
用户无法通过 .apk 文件更新应用程序。它总是因“未安装应用程序”错误而失败。用户必须手动从设备中删除应用程序并安装它。在添加相机功能之前,这个错误没有发生,它总是更新应用程序。
即使我有两个参数
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" />
解决方案
推荐阅读
- c# - 为什么我的与 DTO 相关的 Swagger.JSON 不会根据正在更新的 API.XML 文件中的定义进行更新?
- javascript - 使用 Vanilla Javascript 发布到 PHP 文件
- php - 使用 PHP 从 JSON 字典中的关联数组中提取随机元素
- node.js - 如何在 Node/Koa 中将流作为 JSON 响应的一部分返回?
- macos - 更改插入符号SwiftUI TextField MacOS的颜色
- javascript - 从从 http 调用接收到的数据中删除数组 - angularJS
- php - Laravel - 我的关系递归中的 N+1 问题
- c++ - 使用 fopen 打开 .pak 文件并将该文件应用于 const unsigned char* (C++)
- python - 使用输入while循环python的最大和最小数字
- aws-lambda - 无服务器框架和 AWS Lambda 函数代码