2010-12-06 64 views
17

對於2.1和更高的Android的API版本,我們可以使用情境:Android:檢查相機是否支持自動對焦?

getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS) 

但是2.1版本之前,我們如何能夠執行相同的操作?有沒有這樣的事情,不涉及調用Camera.open,然後getParameters

回答

0

在API Level 5中添加了一些Camera.Parameters類的方法(我相信這些方法會映射到Android 2.0),它將返回支持的功能列表。在Camera.Parameters呼叫getSupportedFocusModes對象從camera.getParameters()獲取

http://developer.android.com/reference/android/hardware/Camera.Parameters.html

+1

我相信他想知道的是Android 1.5和這樣。 – blindstuff 2010-12-06 16:40:34

+0

是的,但您必須首先調用Camera.open,而我不想?我想要的只是一個簡單的方法來獲取手機相機是否支持自動對焦的信息 – user441316 2010-12-06 16:47:01

6

我猜:不要使用不明不變。

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級......或者實施此http://www.java.net/forum/topic/java-tools/java-development-tools/wwyt-conditional-compilation-pre-process ......是的,沒錯。

他們真的很難支持多個版本。所以對不起1.5和1.6和2.0用戶。因爲我的設備在2.2版本上,這將是我的底線。

18
List<String> supportedFocusModes = camera.getParameters().getSupportedFocusModes(); 
boolean hasAutoFocus = supportedFocusModes != null && supportedFocusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO) 
3
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); 
     } 
    } 
1
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])); 
      } 
     }