2013-03-14 116 views
1

我已經使用這個腳本打開前面攝像頭:的Android使用前置攝像頭 - 兼容所有設備

private Camera openFrontFacingCameraGingerbread() { 
int cameraCount = 0; 
Camera cam = null; 
Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
cameraCount = Camera.getNumberOfCameras(); 
for (int camIdx = 0; camIdx < cameraCount; camIdx++) { 
    Camera.getCameraInfo(camIdx, cameraInfo); 
    if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
     try { 
      cam = Camera.open(camIdx); 
     } catch (RuntimeException e) { 
      Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage()); 
     } 
    } 
} 

我覺得這個劇本應該選擇並打開前置攝像頭的所有設備。 但在我的設備上,腳本只能在具有兩個攝像頭的設備(前置攝像頭+後置攝像頭)上正常工作。在具有一個前置攝像頭的其他設備上,我只收到空白屏幕。僅使用一臺前置攝像頭訪問攝像機是否有區別?

回答

1

「在具有一個前置攝像頭的其他設備上,我只收到空白屏幕。」

通過「接收地[和]只黑屏」,你從Camera Preview是什麼意思?通過撥打Camera.open(cameraId)打開相機不會自動爲您提供預覽屏幕。請參閱方法從this示例教程中獲取啓動相機預覽的示例。

此外,請確保您的設備沒有任何硬件問題(通過測試股票相機應用程序以確定您的代碼是否成功打開相機預覽或在不同的設備上)。

「但在我的設備是腳本只在設備正常工作有兩個 攝像頭(前置+後置攝像頭)。」

camIdx的和cameraCount的值是有效的,如預期;因此,它應該正常工作。無論該設備具有攝像頭的總數,你在你的問題中提供的代碼只有打開前置攝像頭,評估你的代碼:

如果你有一個攝像頭:

cameraCount = Camera.getNumberOfCameras(); // cameraCount == 1 
// in for loop 
cam = Camera.open(camIdx); // camIdx == 0 

如果你有兩個攝像頭:

cameraCount = Camera.getNumberOfCameras(); // cameraCount == 2 
// ... more codes 
// in for loop 
cam = Camera.open(camIdx); // camIdx == 1 

「僅使用一臺前置攝像頭訪問攝像機是否有區別?」 *

不應該有在用不同規格不同的設備打交道時調用Camera對象及其關聯的方法有什麼區別。就Android應用程序開發而言,我們需要的是通過調用Camera.CameraInfo()來檢索Camera.CameraInfo對象,並在需要時調用其關聯的方法。

0

這種方法應該給你提供最多的前置攝像頭。如果設備只有後置攝像頭,您將獲得該攝像頭。如果有兩個,你會得到前面的一個。如果前面只有一個,你會得到那個:

private Camera getCameraInstance() { 
    Camera c = null; 
    try { 
     // get the front-est camera 
     c = Camera.open(Camera.getNumberOfCameras() - 1); 
    } catch (Exception e) { 
     Log.d(TAG, "Couldn't get the camera"); 
    } 
    return c; 
} 
相關問題