2017-06-21 33 views
0

我一直在處理自定義SurfaceView相機。我需要使用前置攝像頭,因爲我的應用程序需要用戶的自拍。檢查自定義前置攝像頭可用性

爲此,我檢查了前置攝像頭是否可用於使用下面的代碼。

public boolean checkFrontCamera() { 
    int numCameras = Camera.getNumberOfCameras(); 
    for (int i = 0; i < numCameras; i++) { 
     Camera.CameraInfo info = new Camera.CameraInfo(); 
     Camera.getCameraInfo(i, info); 
     if (CameraSource.CAMERA_FACING_FRONT == info.facing) { 
      return true; 
     } 
    } 
    return false; 
} 

它的工作正常,如果設備有兩個攝像頭,它會返回true。但是,如果設備只有一個攝像頭,則此方法始終返回false,因爲在此情況下,info.facing爲0,對於此代碼中的相同CameraSource.CAMERA_FACING_FRONT爲1.

對於攝像頭,我已使用gms視覺庫。下面的代碼是相機源代碼。

CameraSource mCameraSource = new CameraSource.Builder(context, detector) 
       .setRequestedPreviewSize(640, 480) 
       .setFacing(CameraSource.CAMERA_FACING_FRONT) 
       .setRequestedFps(30.0f) 
       .build(); 

在這裏,我需要通過攝像頭面對params。

請提供是否有其他選擇。歡迎所有解決方案。

+1

它的罰款這種方式。我認爲沒有隻有前置攝像頭的Android設備。 – aborocz

+0

感謝您的回覆。我有一個設備在測試,即聯想Tab 2 A7-10F,它只有前置攝像頭,我從這裏可以知道這個問題。 – Neo

+0

那麼在這種情況下,它不算作前置攝像頭。 – aborocz

回答

1

那麼你可以使用這個方法,它返回相機對象

private Camera getCameraInstance() { 
    Camera c = null; 
    try { 
     if (Camera.getNumberOfCameras() >= 2) { 
      //Front facing camera 
      c = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
     } else { 
      // only has one camera (Rear) 
      c = Camera.open(); 
     } 
    } catch (Exception e) { 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 
+0

謝謝,請看我編輯的問題。我正在使用gms lib,因此攝像頭會基於camera.facing打開,我們通過。 – Neo

+0

通過這段代碼,它將打開任何主攝像頭,如果只有一個攝像頭。我只需要打開前置攝像頭(如果可用)或提醒用戶。 – Neo

相關問題