Marshmallow 中的手电筒控制

2024-05-06

我对最新 Marshmallow 版本中的相机(更具体地说是手电筒)有疑问。 在任何棉花糖之前的版本上,我需要执行以下操作来打开/关闭闪光灯:

private void turnFlashOn(final Camera camera, int flashLightDurationMs) {
    if (!isFlashOn()) {
        final List<String> supportedFlashModes = camera.getParameters().getSupportedFlashModes();
        if (supportedFlashModes != null && supportedFlashModes.contains(Camera.Parameters.FLASH_MODE_TORCH)) {
            mParams.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
            camera.setParameters(mParams);
        }
    }
}

and

private void turnFlashOff(Camera camera) {
    if (camera != null) {
        final List<String> supportedFlashModes = camera.getParameters().getSupportedFlashModes();
        if (supportedFlashModes != null && supportedFlashModes.contains(Camera.Parameters.FLASH_MODE_OFF)) {
            mParams.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
            camera.setParameters(mParams);
        }
    }
}

不幸的是,棉花糖设备开始在野外崩溃。不知何故camera.getParameters() and camera.setParameters()开始失败并显示以下消息:

RuntimeException:getParameters 失败(空参数)

运行时异常:设置参数失败

我尝试在获取参数之前启动和停止预览,这不再引发错误。但是,当我打电话时,预览没有恢复camera.startPreview().

我担心释放相机并重新打开它是不可能的,因为这需要几秒钟的时间并且会产生糟糕的体验。

关于如何可靠地打开/关闭棉花糖中的手电筒有什么建议吗?


Google 在 OS 6 (Android M) 中引入了 torchmode。
如果您的目的只是打开/关闭闪光灯,下面的代码可以帮助您:

private static void handleActionTurnOnFlashLight(Context context){
    try{

        CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
        String[] list = manager.getCameraIdList();
        manager.setTorchMode(list[0], true);
    }
    catch (CameraAccessException cae){
        Log.e(TAG, cae.getMessage());
        cae.printStackTrace();
    }
}

private static void handleActionTurnOffFlashLight(Context context){
    try{
        CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
        manager.setTorchMode(manager.getCameraIdList()[0], false);
    }
    catch (CameraAccessException cae){
        Log.e(TAG, cae.getMessage());
        cae.printStackTrace();
    }
}

您所要做的就是:获取cameraid 的列表,其中相机ID 零(0) 是您要打开/关闭闪光灯的主相机。只需将cameraID 传递给setTochMode API,并使用布尔值来打开或关闭它。

请注意,这段代码仅适用于 OS 6,因此您需要检查设备操作系统,并根据该情况选择为 pre-marshmallow 设备调用哪些 API。

如果它解决了您的问题,请将此标记为解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Marshmallow 中的手电筒控制 的相关文章

  • 使用 GcmListenerService 的多个 GCM 侦听器

    Google 建议使用 GcmListenerService 代替 GcmBroadcastReceiver 我正在制作一个使用 GCM 的库项目 com android library 插件 当应用程序项目 com android app
  • 数据未正确加载到 Firebase 应用程序中

    我在 android studio 上使用 firebase 创建了一个应用程序 使用移动 otp 进行身份验证后会出现一个搜索视图 当用户在搜索视图上搜索时 它将过滤结果并转到回收器视图等 第一次启动活动 即身份验证后的家庭活动 应用程序
  • 如何更改json对象名称(键)?

    只是一个简单的问题 如果我有一个包含 键 值 的 json 对象 如下所示 name value 我想将名称部分更改为其他名称 我该怎么办 我不想删除并重新创建它 鉴于以下情况 正确且紧凑的实施jsonObject是您引用的 json 对象
  • RecyclerView 上的删除按钮删除了错误的项目

    我正在使用 Firestore 适配器RecyclerView我在使用 删除 按钮时遇到问题 当我按下它时 它会删除错误的项目 而不是我想要的项目 这是我的按钮内部的代码onBindViewHolder protected void onB
  • android 中的自定义 MediaPlayer 类

    我刚刚完成了一个项目 我使用网络视图进行视频播放 现在我被要求用自定义播放器替换 webview 部分 玩家应该能够处理 HLS 如果我使用VideoView和MediaController 我可以播放直播 但不幸的是 MediaContr
  • 如何在eclipse中打开项目

    我下载了 LISTView 教程的 zip 文件 其中包含所有文件 但我不知道如何在 Eclipse 中打开它 因为它只是打开文件 而不是整个项目 我从这里下载的 http mfarhan133 wordpress com 2010 10
  • 设备管理员禁用

    如果不是 则无法卸载设备管理应用程序 禁用 用户可以从设置中禁用 设备管理员 当公司向员工提供 Android 设备时 公司希望 可以控制设备及其状态和策略 但用户可以 轻松摆脱这种控制 有谁知道这怎么可能 防止用户禁用设备管理员 谢谢 无
  • 等待设备时出错:AVD 的模拟器进程 .... 已被终止

    我是Andriod开发的新手 在运行该应用程序时遇到了一个奇怪的问题 如下图所示 我也google了一下 但没有找到有用的答案 谁能告诉我我能做什么 gt 我找到了这个 只需转到这个目录 cd ANDROID HOME Sdk emulat
  • Android 版 OpenGL ES 中的透明纹理

    我试图在 opengl 中设置四边形上纹理的透明度 使用混合函数没有帮助 谷歌上也没有任何帮助 有什么建议么 我遇到了类似的问题 一段代码可以正常工作 而另一段则不能 经过大量的日志记录和调试 我发现差异只是一行代码 在具有工作 Alpha
  • LineSpace 如何影响单行文本中的 StaticLayout 高度

    考虑这个简单的例子 我有这样的单行文本 你好 我想使用 StaticLayout 来测量这个文本 所以我写了这样的东西 StaticLayout layout new StaticLayout Hello myTextView getPai
  • 如何在 Android 上重复使用 AlertDialog 来表示是/否?

    我正在尝试找到重用显示自定义标题的对话框的方法 然后将 是 否 单击发送到启动该对话框的函数 我有两个按钮 保存 和 关闭 两者都调用 是 否 对话框 一个显示 您要保存 另一个显示 关闭更改吗 我认为我的程序非常 脏 但我想它可以工作 但
  • 对于 2.3.4 上文件路径设置的铃声,MediaPlayer setDataSource 失败,状态 = 0x80000000

    标题说明了大部分内容 我的应用程序一直在播放 uri 指向的铃声 例如content media internal audio media 387 or content media external audio media 1655 我相信
  • Android 7 GraphicBuffer 替代方案,用于直接访问 OpenGL 纹理内存

    从移动设备具有 CPU 和 GPU 共享内存这一事实中获利的唯一方法是使用GrphicBuffer 但由于 Android 7 限制对私有本机库 包括 gralloc 的访问 因此无法再使用它 问题 是否有其他方法可以直接内存访问纹理的像素
  • Android Studio 2.0 AVD 管理器中缺少 API 14 和 15

    在Android Studio中创建AVD时 列表中缺少API 14和15的系统映像 尽管我实际上在SDK管理器中安装了相应的SDK版本 我认为这个问题是在升级到Android Studio 2 0后出现的 如何为这些 API 版本创建 A
  • 使用 Gradle 在多个 Android 应用程序之间共享 Android 库

    我有 Android 应用程序 A 和 B 我想将每个应用程序中的重复代码提取到共享库 L 中 如何使用 Gradle 执行此操作 我之前见过这个问题的一些排列 但答案很少 最接近 最好的已问问题是这个 多个 Android 应用程序依赖于
  • 活动丢失后终止异步任务

    这是我的过程和问题 在此应用程序中 您单击菜单按钮 在此菜单中 您按下切换按钮 该按钮将启动异步任务 每 30 秒发出一次提示音 该任务是在选中切换时持续运行 并在取消选中时取消 只要您留在菜单窗口中 就可以启动和停止该过程 检查切换框 如
  • Android:RecyclerView 项目上下文菜单问题

    我正在尝试实现一个 RecyclerView 单击每个项目时 都会弹出一个上下文菜单 我已引用此的答案 评论question https stackoverflow com questions 26466877 how to create
  • Android 浏览器缩放?

    我正在尝试为 Android 创建一个移动网站 当我将主体宽度设置为 480px 屏幕宽度 时 结果比我预期的大 50 左右 看来 android 正在缩放它所绘制的内容并弄乱了我所有的布局 有谁知道如何禁用它或解决它 我已经在使用这个 您
  • 支持的 Android 设备:0 台设备

    我们是 TourisMap 的开发商 我们不明白为什么在 Google Play 开发者控制台上上传 apk 后 我们支持 0 台设备 我们个人的想法是 Manifest 和 build gradle 都可以 我们可以生成 apk 然后我们
  • 除了前一个按钮意图之外,如何添加另一个按钮意图?

    这是我的代码 它包含一个名为的按钮button1A当我单击它时 它会打开一个名为的列表list1 如何为另一个名为 button2A 的按钮添加代码 该按钮将打开一个列表 List2 import android os Bundle imp

随机推荐