You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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构建配置

    1. 打开android/app/build.gradle,将targetSdkVersion设置为33或更高版本,提升兼容性。
    2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:21:38