2013-01-18 4 views
8

내 앱에는 리어 카메라가 필요한 기능이 있습니다. 전면 카메라가 있는지 여부는 내 필요와 관련이 없습니다. 모든 상황에서 후방 카메라의 존재 여부를 감지 할 수있는 확실한 루틴을 만들어내는 것이 까다로울 수 있습니다. 예를 들어, HTC Evo 3D를 사용하는 사용자는 앱에 후방 카메라가 없다고 분명히 말했고 다른 사용자로부터 유사한 불만이 제기되었다고 불평했습니다.리어 카메라 부족 감지

수많은 기기가 있지만 Nexus 7과 같은 전면 카메라 만있는 기기 나 사용자가 언급 한 모델이 없기 때문에 까다로운 문제입니다. 여기

내가 무엇을, 그리고이이 사이트에 다른 답변에 코드에서 찍은 그러나

PackageManager pm = context.getPackageManager(); 
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA); 

: 지금이 훨씬 간단 버전으로이 코드를 교체 한

boolean rearCameraFound = false; 
    if(BUILD_VERSION > 8){ 
     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_BACK ) { 
       try { 
        cam = Camera.open(camIdx); 
        Log.d("TAG", "Rear camera detected"); 
        rearCameraFound = true; 
       } catch (RuntimeException e) { 
        Log.e("TAG", "Camera failed to open: " + e.getLocalizedMessage()); 
       } 
      } 
      if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
       Log.d("TAG", "Front camera detected"); 
      } 
     } 
     return rearCameraFound; 
    }else{ 
     if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){ 
      // this device has a camera 
      return true; 
     } else { 
      // no camera on this device 
      return false; 
     } 
    } 

, 예를 들어 Nexus 7에서는 전면 카메라 만 있으면 어떤 일이 일어날 지 모르겠습니다. 이게 사실일까요?

후면 카메라가 있는지 여부를 알려주는 코드를 찾고 있습니다!

+2

을 존재하지 않는다 이 코드는 Nexus 7 실행중인 주식에 대해 false를 반환합니다. JB 4.2 –

+0

Sahil - 과거에이 작업을 시도했으나 이렇게하기에 충분한 명성이 없었 음을 알 렸습니다.지금 당장 가지고 있다고 생각합니다. 제 질문을 확실히 지키고, 이것이 끝났다고 확신합니다, 고마워요. – androidneil

답변

9

Nexus 7 (앞면 카메라가 하나뿐입니다)은 FEATURE_CAMERA으로 false를 반환하지만 그 대신 FEATURE_CAMERA_FRONT을 사용할 수 있습니다. 이 discussion을 확인하십시오.

이제 위의 방법을 사용하여 적어도 하나의 카메라가 있는지 확인할 수 있습니다. 이제 카메라의 전화 번호를 확인할 수 있습니다. 전화 번호가 1보다 큰 경우에는 후면 카메라가 있어야합니다.

import android.hardware.Camera; 

int numCameras = Camera.getNumberOfCameras(); 
if (numCameras > 1) { 
    rearCamera = true; 
} 

이것은 매우 까다 롭습니다. 하지만 그게 다에요, 이제 생각할 수 있습니다. 한번 시도해보십시오.

+0

그래서 리어 카메라에 대해서만 알고 싶으면 더 새롭고 단순한 코드가 필요한 것일 수 있습니다. 내가 할 수있는 일은 사용자 의견을 기다리는 것입니다. – androidneil

+4

후면 카메라 만 사용할 수있는 경우에는 작동하지 않습니다. –

+0

@TranHoangDuyAnh 정확히 무엇을하고 싶습니까? –

2

이 스 니펫을 사용하십시오. API 9 이상에서만 작동합니다.

private static boolean checkCameraFacing(final int facing) { 
    if (getSdkVersion() < Build.VERSION_CODES.GINGERBREAD) { 
     return false; 
    } 
    final int cameraCount = Camera.getNumberOfCameras(); 
    CameraInfo info = new CameraInfo(); 
    for (int i = 0; i < cameraCount; i++) { 
     Camera.getCameraInfo(i, info); 
     if (facing == info.facing) { 
      return true; 
     } 
    } 
    return false; 
} 

public static boolean hasBackFacingCamera() { 
    final int CAMERA_FACING_BACK = 0; 
    return checkCameraFacing(CAMERA_FACING_BACK); 
} 

public static boolean hasFrontFacingCamera() { 
    final int CAMERA_FACING_BACK = 1; 
    return checkCameraFacing(CAMERA_FACING_BACK); 
} 

public static int getSdkVersion() { 
    return android.os.Build.VERSION.SDK_INT; 
} 

그리고 카메라를 열 필요가 없습니다. 장치가 하나의 카메라 만이 있으면 다시 카메라가 존재하는 경우에만 카메라, 단지 전방 카메라, 다시 제 체크 할 수

Context context = this; //If its an Activity 

// Context context=getActivity(); If its a fragments 

PackageManager packageManager = context.getPackageManager(); 

if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { 

    Log.i("CameraLog", "Back Camera is Available"); 

} else { 

    Log.i("CameraLog", "No Back Camera Available"); 

     } 
1

:

  • 앞면 카메라가 있는지 확인하지만 카메라가 2 개인 카메라가 앞면 카메라인지 확인합니다.
  • 장치가 하나의 카메라를 가지고 있지만 다시하거나 전면 카메라 수 있다면 6,
  • 점검
  • 최종 결과 : 장치가 전면 카메라를 가지고 있으며,이 경우 하나의 카메라 만 다시 카메라가 더 참고
private boolean backCameraExists() { 
    boolean isFrontExists = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT); 
    if (isFrontExists && (Camera.getNumberOfCameras()<2)) { 
     return false; 
    } 
    return true; 
} 
1

백 카메라 전면 카메라

Context context = this; //If its Activity 

// Context context=getActivity(); If its a Fragment 

PackageManager packageManager = context.getPackageManager(); 

if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) { 

    Log.i("CameraLog", "Front Camera Available"); 

} else { 

    Log.i("CameraLog", "No Front Camera Available"); 
     } 

들어

관련 문제