기기에 카메라가 있는지 확인 하시겠습니까?
내 앱에서 기기에 카메라가있는 경우 카메라를 사용하고 싶습니다. 카메라 가없는 Android를 실행하는 장치 가 있습니까? 내 매니페스트에 다음을 포함하여 :
<uses-feature android:name="android.hardware.camera" android:required="false"/>
기본적으로 "카메라가 있으면 사용 하겠지만 앱을 실행하는 데 카메라가 필요하지 않습니다."라고 말합니다.
Camera 클래스를 사용하기 전에 장치에 카메라가 있는지 어떻게 확인할 수 있습니까?
나는 그것을 시도하지 않았지만 :
private android.hardware.Camera mCameraDevice;
try {
mCameraDevice = android.hardware.Camera.open();
} catch (RuntimeException e) {
Log.e(TAG, "fail to connect Camera", e);
// Throw exception
}
필요한 것일 수 있습니다.
이것이 내가 사용하는 것입니다.
import android.content.pm.PackageManager;
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
}
테스트 할 다른 모든 재미있는 것들도 사용할 수 있습니다. 나침반, 위치, 전면 카메라 : http://developer.android.com/reference/android/content/pm/PackageManager.html
장치에서 사용할 수있는 카메라 수를 확인하려면 다음으로 전화하십시오.
import android.hardware.Camera;
int numCameras = Camera.getNumberOfCameras();
if (numCameras > 0) {
hasCamera = true;
}
Camera.getNumberOfCameras ()는 정적이므로 실제로 카메라에 연결할 필요가 없습니다. 이것은 API 9부터 작동합니다.
편집하다:
최신 camera2 API를 사용하면 개수뿐만 아니라 모든 유효한 카메라 ID 목록을 제공하는 CameraManager.getCameraIdList ()를 호출 할 수도 있습니다 .
장치에서 카메라를 찾으려면 이것을 사용해야합니다.
public static boolean isCameraAvailable(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
Camera 확인을 위해 PackageManager.hasSystemFeature () 메서드를 사용합니다 .
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
출처 : https://developer.android.com/guide/topics/media/camera.html#custom-camera
Camera.getNumberOfCameras ()는 더 이상 사용되지 않습니다. 당신이 사용할 수있는:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public int getNumberOfCameras() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
try {
return ((CameraManager) getSystemService(Context.CAMERA_SERVICE)).getCameraIdList().length;
} catch (CameraAccessException e) {
Log.e("", "", e);
}
}
return Camera.getNumberOfCameras();
}
이 시도 :
/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
출처 : http://developer.android.com/guide/topics/media/camera.html
다음과 같이 장치에 카메라가 있는지 확인할 수 있습니다.
/** Check if this device has a camera */
public static boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA))
{
return true;
}
else if(context.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_CAMERA_FRONT))
{
return true;
}
else {
return false;
}
}
Android 2.3을 사용하는 경우 카메라 수 (전면 및 후면)와 같이 카메라 상태를 확인할 수있는 몇 가지 API가 있습니다.
이 시도
전면 카메라 용
Context context = this;
PackageManager packageManager = context.getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {
Utils.makeAlertDialog(context, "Has Front Camera ?", "YES");
} else {
Utils.makeAlertDialog(context, "Has Front Camera ?", "NO");
}
후면 카메라 용
Context context = this;
PackageManager packageManager = context.getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
Utils.makeAlertDialog(context, "Has back Camera ?", "YES");
} else {
Utils.makeAlertDialog(context, "Has back Camera ?", "NO");
}
설명서에 따라 패키지 관리자를 사용하여 장치에서 카메라를 사용할 수 있는지 확인해야합니다.
자바 :
final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);
Kotlin에서 :
val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
USB 카메라를 여러 번 연결하고 재생할 수있는 Android TV 상자에서 발견했습니다. 어떤 시점에서 카메라 서비스는 시스템에 연결된 카메라가없는 동안 시스템에서 하나의 카메라를 감지했다고 말하기 시작합니다. 이것은 카메라를 여러 번 연결 / 분리 할 때 발생합니다. 이 문제를 해결하기 위해이 솔루션이 작동하는 것으로 나타났습니다.
//under oncreate:
//cameraManager = ((CameraManager) getSystemService(Context.CAMERA_SERVICE));
public int getNumberOfCameras() {
int count_ = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
try {
count_ = cameraManager.getCameraIdList().length;
if(count_==1)
{
try {
cameraManager.getCameraCharacteristics(cameraManager.getCameraIdList()[0]);
}catch (Exception e)
{
count_ = 0;
}
}
} catch (Exception e) {
//e.printStackTrace();
}
}
else {
count_ = Camera.getNumberOfCameras();
}
return count_;
}
한 줄 솔루션 :
public static boolean hasCamera(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA);
}
이 메소드를 Utils.java 프로젝트 클래스에 넣으십시오.
Android 문서에 따라 :
/** Check if this device has a camera */
private boolean checkCameraHardware(Context context) {
if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
// this device has a camera
return true;
} else {
// no camera on this device
return false;
}
}
Refer more about the camera API :
https://developer.android.com/guide/topics/media/camera.html#detect-camera
참고URL : https://stackoverflow.com/questions/1944117/check-if-device-has-a-camera
'programing' 카테고리의 다른 글
Objective-C-nan에 대한 플로트 검사 (0) | 2020.10.13 |
---|---|
SQL 쿼리 : 테이블에서 최신 N을 제외한 모든 레코드를 삭제 하시겠습니까? (0) | 2020.10.13 |
문자열 바꾸기 방법이 문자를 바꾸지 않습니다. (0) | 2020.10.13 |
Notepad ++ 충돌시 코드 줄 손실 (0) | 2020.10.13 |
따옴표와 큰 따옴표 이스케이프 (0) | 2020.10.12 |