Android端cordova-plugin-barcodescanner扫描后崩溃问题求助
问题现象
Android端使用@red-mobile/cordova-plugin-barcodescanner插件时,相机可正常启动,能识别条码内容并打印到日志,但扫描完成后应用直接崩溃,随后跳转到登录页面;iOS端运行无异常。
技术环境
- METEOR@2.15
- Cordova 7
- Android SDK 33
- AngularJS
- @red-mobile/cordova-plugin-barcodescanner@9.1.0
排查情况
日志未发现明确异常信息,已尝试所有可编译的Cordova条码扫描器变体,均出现相同问题。预期扫描完成后返回启动扫描的页面,但实际仅短暂返回后就崩溃跳转。
相关配置与代码
权限配置
<uses-permission android:name="com.google.zxing.client.android.SCAN"/> <uses-permission android:name="android.permission.CAMERA" />
触发扫描的视图代码
<label class="item item-input item-range" ng-click="cameraView.scanQRCode()"> <div layout="row" layout-align="center center" class="item-container qr-code-container"> <i class="icon ion-ios-qr-scanner-outline qr-code-icon"></i> </div> </label>
核心扫描调用代码
cordova.plugins.barcodeScanner.scan( function(result) { // 扫描成功回调逻辑 }, function(error) { // 扫描失败回调逻辑 }, { // 扫描配置参数 } );
排查方向与解决方案
Activity生命周期冲突排查
Android端扫描完成后,插件可能触发了意外的Activity销毁或生命周期回调,导致应用路由异常跳转至登录页。可以在扫描成功回调中手动控制页面跳转逻辑,覆盖插件默认的返回行为,避免干扰应用自身的页面栈管理。SDK 33权限适配
SDK 33对权限的管控更严格,除了已声明的CAMERA权限,需确认是否动态申请了必要权限(如POST_NOTIFICATIONS),同时检查插件是否适配了Android 13的权限模型。可以尝试在应用启动时主动请求相机权限,避免扫描时权限状态异常。Cordova版本兼容性升级
Cordova 7版本较老旧,与Android SDK 33存在兼容性风险。建议升级Cordova至11及以上版本,同时确保@red-mobile/cordova-plugin-barcodescanner插件版本与新Cordova版本匹配,解决底层框架的兼容性问题。AngularJS作用域修复
扫描回调可能在AngularJS作用域之外执行,导致页面状态更新异常引发崩溃。在扫描成功/失败的回调函数中,使用$scope.$apply()强制触发AngularJS的脏检查,确保页面状态同步:cordova.plugins.barcodeScanner.scan( function(result) { $scope.$apply(function() { // 处理扫描结果的逻辑 }); }, function(error) { $scope.$apply(function() { // 处理错误的逻辑 }); } );插件页面栈优化
插件的扫描页面可能未正确从Activity栈中移除,导致返回时栈结构混乱。可以修改插件的Android原生代码,确保扫描完成后调用finish()关闭当前扫描Activity;或者在Cordova配置文件中调整android:launchMode参数,避免Activity重复创建。
内容的提问来源于stack exchange,提问作者A42 Labs

