Flutter集成Agora实现视频通话时permission_handler编译报错如何解决
报错原因及解决方案
根本原因
你当前使用的permission_handler 8.2.5版本适配了Android 12(API 级别31,版本代号S)的新增蓝牙权限,但你的项目compileSdkVersion和targetSdkVersion仅为30,Android SDK 30中不存在对应的版本代号常量和权限常量,因此编译报错。
解决步骤
方案一:适配Android 12(推荐,符合最新系统适配要求)
- 修改
android/app/build.gradle配置:
android { compileSdkVersion 31 // 新增/修改为31或更高 defaultConfig { applicationId "**********" minSdkVersion 16 targetSdkVersion 31 // 修改为31或更高 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true } }
- 更新
AndroidManifest.xml权限配置,适配不同Android版本的蓝牙权限要求:
<!-- 原有普通权限保留 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 原有蓝牙权限增加maxSdkVersion,仅在Android 12以下生效 --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <!-- 新增Android 12及以上所需蓝牙权限 --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" /> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
- 清理项目缓存后重新构建,依次执行以下命令:
flutter cleanflutter pub get
重新运行项目即可。
方案二:无需适配Android 12的快速解决方案
如果暂时不想升级compileSdkVersion,可以将permission_handler降级到未引入Android 12蓝牙适配的版本,修改pubspec.yaml配置:
dependencies: agora_rtc_engine: ^4.0.7 permission_handler: 7.2.0 # 固定为7.2.0版本,避免引入Android 12适配代码
修改后执行flutter clean、flutter pub get重新构建即可。
内容的提问来源于stack exchange,提问作者tenacioustarsor
相关产品推荐
相关产品推荐

