2015-04-21 3 views
1

Я знаю, что могу установить boolean flag while opening front Camera. И если флаг верен, это означает, что передняя камера включена.Проверьте, какая камера открыта спереди или сзади Android

Но есть ли способ использовать Android API, чтобы узнать, какая камера открыта прямо сейчас? Спереди или сзади.

public int getFrontCameraId() { 
    CameraInfo ci = new CameraInfo(); 
    for (int i = 0 ; i < Camera.getNumberOfCameras(); i++) { 
     Camera.getCameraInfo(i, ci); 
     if (ci.facing == CameraInfo.CAMERA_FACING_FRONT) return i; 
    } 
    return -1; // No front-facing camera found 
} 

Предварительный просмотр камеры инвертирует (вверх), когда я открываю переднюю камеру. Таким образом, я должен добавить чек, который камера открыта if FrontCamera is opened then matrix = 270. otherwise matrix =90.

onPreviewFrame (байт abyte0 [], камера камера)

int[] rgbData = YuvUtils.decodeGreyscale(abyte0, mWidth,mHeight); 

    editedBitmap.setPixels(rgbData, 0, widthPreview, 0, 0, widthPreview, heightPreview); 

    finalBitmap = Bitmap.createBitmap(editedBitmap, 0, 0, widthPreview, heightPreview, matrix, true); 
+0

http://stackoverflow.com/questions/15862621/how-to-check -f-camera-is-open-by-any-application –

ответ

1
private boolean safeCameraOpen(int id) { 
    boolean qOpened = false; 

    try { 
     releaseCameraAndPreview(); 
     mCamera = Camera.open(id); 
     qOpened = (mCamera != null); 
    } catch (Exception e) { 
     Log.e(getString(R.string.app_name), "failed to open Camera"); 
     e.printStackTrace(); 
    } 

    return qOpened;  
} 

private void releaseCameraAndPreview() { 
    mPreview.setCamera(null); 
    if (mCamera != null) { 
     mCamera.release(); 
     mCamera = null; 
    } 
} 

Поскольку уровень API 9, рамки камера поддерживает несколько камер.
Если вы используете устаревший API и вызываете open() без аргумента, вы получаете первую обращенную назад камеру.

Устройства Android могут иметь несколько камер, например, обратную камеру для фотосъемки и фронтальную камеру для видеозвонков.

Android 2.3 (API Level 9) и более поздние версии позволяет вам проверять количество доступных на устройстве камер, используя метод Camera.getNumberOfCameras().

Чтобы получить доступ к основной камере, используйте метод Camera.open() и быть уверенным, чтобы поймать любые исключения, как показано в коде ниже:

/** A safe way to get an instance of the Camera object. */ 
public static Camera getCameraInstance(){ 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } 
    catch (Exception e){ 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 

На устройствах под управлением Android (уровень API 9) 2,3 или выше, вы можете доступ к определенным камерам с помощью Camera.open (int).
Приведенный выше примерный код будет иметь доступ к первой, обращенной к лицу камере на устройстве с несколькими камерами.

+0

Не забудьте освободить камеру после ее использования с помощью функции 'Camera.release()' – bhansa

+0

'android.hardware.Camera' устарел –

+0

@Gaan_setaglA, это просто из-за новый API Camera2, который практически не поддерживается никакими телефонами, кроме новейших устройств Nexus. – EpicPandaForce

1

В новом android.hardware.camera2 пакете, вы можете узнать из CameraCharacteristics.LENS_FACING собственности и каждый CameraDevice публикует его id с CameraDevice.getId() легко добраться до характеристик.

В предыдущем API-интерфейсе камеры я считаю, что единственный способ - отслеживать индекс, с которого вы его открыли.

private int cameraId; 

public void openFrontCamera(){ 
    cameraId = getFrontCameraId(); 
    if (cameraId != -1) 
    camera = Camera.open(cameraId); //try catch omitted for brevity 
} 

Затем используйте cameraId позже, это little snippet может быть лучшим способом достижения того, что вы пытаетесь:

public void onOrientationChanged(int orientation) { 
    if (orientation == ORIENTATION_UNKNOWN) return; 
    android.hardware.Camera.CameraInfo info = 
      new android.hardware.Camera.CameraInfo(); 
    android.hardware.Camera.getCameraInfo(cameraId, info); 
    orientation = (orientation + 45)/90 * 90; 
    int rotation = 0; 
    if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { 
     rotation = (info.orientation - orientation + 360) % 360; 
    } else { // back-facing camera 
     rotation = (info.orientation + orientation) % 360; 
    } 
    mParameters.setRotation(rotation); 
} 
+0

где я должен положить код или назвать его onOrientationChanged – Nepster

+0

Перейдите по ссылке "little snippet" – weston

Смежные вопросы