Flutter调用手电筒包时出现「vendor.camera.aux.packagelist」权限拒绝警告求助
解决Flutter开启手电筒时的“Access denied finding property 'vendor.camera.aux.packagelist'”警告
以下是几个可行的解决办法,按优先级尝试:
补充权限并动态申请
除了你已添加的权限,在AndroidManifest.xml中补充闪光灯权限:<uses-permission android:name="android.permission.FLASHLIGHT" />由于Android 6.0及以上版本中
CAMERA属于危险权限,必须动态申请,使用permission_handler包实现:import 'package:permission_handler/permission_handler.dart'; Future<bool> checkAndRequestCameraPermission() async { var status = await Permission.camera.status; if (!status.isGranted) { status = await Permission.camera.request(); } return status.isGranted; }在开启手电筒前先调用这个方法确保权限已授予。
调整Android构建配置
- 打开
android/app/build.gradle,将targetSdkVersion设置为33或更高版本,提升兼容性。 - 在
AndroidManifest.xml的<application>标签内添加元数据,声明闪光灯硬件支持:
<application ...> <meta-data android:name="android.hardware.camera.flash" android:value="true" /> </application>- 打开
更换手电筒实现方式
如果使用的第三方包存在兼容性问题,可以通过MethodChannel直接调用Android原生API实现手电筒功能:
Dart端代码:import 'package:flutter/services.dart'; class FlashlightManager { static const MethodChannel _channel = MethodChannel('flashlight_channel'); static Future<void> turnOn() async { try { await _channel.invokeMethod('turnOn'); } on PlatformException catch (e) { print('Flashlight error: ${e.message}'); } } }Android端(MainActivity.kt):
import android.content.Context import android.hardware.camera2.CameraManager import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodChannel class MainActivity : FlutterActivity() { private val CHANNEL = "flashlight_channel" override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result -> when (call.method) { "turnOn" -> { val cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager try { val cameraId = cameraManager.cameraIdList.first() if (cameraManager.getCameraCharacteristics(cameraId) .get(CameraManager.CAMERA_CHARACTERISTICS_FLASH_INFO_AVAILABLE) == true) { cameraManager.setTorchMode(cameraId, true) result.success(null) } else { result.error("NO_FLASH", "Flash not available", null) } } catch (e: Exception) { result.error("ERROR", e.message, null) } } else -> result.notImplemented() } } } }忽略警告(功能正常时)
这个警告大多是系统层面的属性访问日志,不会影响手电筒功能的正常运行。如果你的手电筒功能正常,可以不用处理,或者在Logcat中过滤掉这条警告信息。
内容的提问来源于stack exchange,提问作者Sovit Nayak
相关产品推荐
相关产品推荐

