Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:检查相机是否支持自动对焦?_Android_Camera_Autofocus - Fatal编程技术网

Android 安卓:检查相机是否支持自动对焦?

Android 安卓:检查相机是否支持自动对焦?,android,camera,autofocus,Android,Camera,Autofocus,对于Android API 2.1版及更高版本,我们可以使用上下文: getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS) 但在2.1版之前,我们如何执行相同的操作?有没有类似的方法不需要调用摄像头。打开然后获取参数?摄像头有很多方法。在API级别5中添加的参数类(我相信映射到Android 2.0)将返回支持的功能列表。在Camera.Parameters对象上调用getSupportedF

对于Android API 2.1版及更高版本,我们可以使用上下文:

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)

但在2.1版之前,我们如何执行相同的操作?有没有类似的方法不需要调用
摄像头。打开
然后
获取参数

摄像头有很多方法。在API级别5中添加的参数类(我相信映射到Android 2.0)将返回支持的功能列表。在Camera.Parameters对象上调用getSupportedFocusModes,该对象从Camera.getParameters()检索


我猜:不要使用未知常量

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)
应该是:

getPackageManager().hasSystemFeature("android.hardware.camera.autofocus")
开发人员在这里使用常量是短视的。它解决了一个问题,即运行一个了解某个特性的API的设备是否具有某个特性。但是你刚才提到的案子失败了。。。它们确实使支持多个api级别变得困难

更新:我自己刚测试过。。。PackageManager.hasSystemFeature()仅在API级别5出现。我试图在我的代码中添加这个检查,它可以很好地支持API级别3(1.5),但它可以从相机的自动对焦中受益…似乎我必须选择支持1.5或能够使用自动对焦。。。或者将我的向后兼容性提升到5级。。。或者实施这个……是的,对

它们确实使支持多个版本变得困难。非常抱歉1.5、1.6和2.0用户。因为我的设备在2.2上,这将是我的底线。

列出支持的FocusModes=camera.getParameters().getSupportedFocusModes();
List<String> supportedFocusModes = camera.getParameters().getSupportedFocusModes();
boolean hasAutoFocus = supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)
布尔hasaautofocus=supportedFocusModes!=null&&supportedFocusModes.contains(Camera.Parameters.FOCUS\u MODE\u AUTO)
专用void GetSupportedFocusedModes(摄像头)
{
final Camera.Parameters=Camera.getParameters();
列出supportedFocusModes=参数。getSupportedFocusModes();
LogUtils.infoMsg(“supportedFocusModes”+supportedFocusModes);
用于(字符串模式:supportedFocusModes){
LogUtils.infoMsg(“supportedFocusModes”+模式);
}
}
CameraManager CameraManager=(android.hardware.camera2.CameraManager)getSystemService(CAMERA_服务);
int[]afModes=cameraManager.getCameraCharacteristics(“0”).get(CameraCharacteristics.CONTROL\u AF\u AVAILABLE\u MODES);

如果(afModes.length)我相信他想知道android 1.5之类的。是的,但你必须先调用Camera.open,我不想这样做?我想要的只是一个简单的方法来获取手机摄像头是否支持自动聚焦“未知常数”的信息很好,因为它将在编译时内联。所以它将相当于您的“应该”在.class/.dex文件中。运行
lint——在Android SDK的
tools
文件夹中显示InlinedApi
以了解更多信息。
hasSystemFeature
是内联不受影响的地方之一。请注意,这不允许您指定哪个摄像头,有些设备只在前向摄像头上自动对焦,而不是在后向摄像头上自动对焦一个。
   private void getSuppourtedFocusedModes(Camera camera) 
   {
        final Camera.Parameters parameters = camera.getParameters();
        List<String> supportedFocusModes = parameters.getSupportedFocusModes();
        LogUtils.infoMsg("supportedFocusModes " + supportedFocusModes);
        for (String mode : supportedFocusModes) {
            LogUtils.infoMsg("supportedFocusModes " + mode);
        }
    }
CameraManager cameraManager = (android.hardware.camera2.CameraManager) getSystemService(CAMERA_SERVICE);

int[] afModes = cameraManager.getCameraCharacteristics("0").get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);

if (afModes.length <= 1)
{Log.d(TAG, "Camera doesn't have autofocus");}
else
{Log.d(TAG, "Camera has autofocus");}

        Log.d(TAG, "CONTROL_AF_AVAILABLE_MODES:");
        for (int position : afModes) {
            switch (afModes[position]) {
                case 0:
                    Log.d(TAG, "CONTROL_AF_MODE_OFF (0)");
                    break;
                case 1:
                    Log.d(TAG, "CONTROL_AF_MODE_AUTO (1)");
                    break;
                case 2:
                    Log.d(TAG, "CONTROL_AF_MODE_MACRO (2)");
                    break;
                case 3:
                    Log.d(TAG, "CONTROL_AF_MODE_CONTINUOUS_VIDEO (3)");
                    break;
                case 4:
                    Log.d(TAG, "CONTROL_AF_MODE_CONTINUOUS_PICTURE (4)");
                    break;
                case 5:
                    Log.d(TAG, "CONTROL_AF_MODE_EDOF (5)");
                    break;
                default:
                    Log.d(TAG, String.valueOf(afModes[position]));
            }
        }