为何parameters.getFlashMode() == Camera.Parameters.FLASH_MODE_OFF返回false?
闪光灯状态判断问题:为什么
==返回false? 嘿,这个问题其实是Java字符串比较的经典陷阱,我来给你拆解清楚~
核心原因:==比的是内存地址,不是内容
你看到两个输出都是off,但用==比较却返回false,本质是因为Java里==的作用是判断两个变量是否指向内存中的同一个对象,而不是比较字符串的内容是否一致。
虽然parameters.getFlashMode()和Camera.Parameters.FLASH_MODE_OFF的字符串内容都是off,但它们可能是两个独立创建的String对象(存在内存的不同位置),所以==会判定它们不相等。
而我们真正需要的是比较字符串内容,这时候应该用equals()方法——它专门用来校验两个字符串的字符序列是否完全一致。
正确的比较写法
把你的判断代码改成这样就对了:
// 推荐把常量放前面,避免getFlashMode()返回null时抛空指针异常 System.out.println(Camera.Parameters.FLASH_MODE_OFF.equals(parameters.getFlashMode()));
附赠:闪光灯切换的完整逻辑
既然你要实现按钮切换闪光灯的功能,给你一个实用的代码片段参考:
Camera cam = getCameraInstance(); if (cam == null) { // 处理相机打开失败的情况,比如权限未授予 return; } Camera.Parameters parameters = cam.getParameters(); String currentFlashMode = parameters.getFlashMode(); if (Camera.Parameters.FLASH_MODE_OFF.equals(currentFlashMode)) { // 当前关闭,切换为常亮模式 parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); } else { // 当前开启,切换为关闭模式 parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); } cam.setParameters(parameters);
另外提醒一下:你的测试设备是Marshmallow(Android 6.0),这个版本开始需要动态申请相机权限,记得在代码里处理权限请求,不然会直接崩溃哦~
内容的提问来源于stack exchange,提问作者Bar Akiva
相关产品推荐
相关产品推荐

