【问题标题】:How to detect front camera and flash availabiliy如何检测前置摄像头和闪光灯的可用性
【发布时间】:2015-11-05 03:17:16
【问题描述】:
您好,我正在开发一个自定义视频应用。我可以通过
获得
currentCameraId
currentCameraId = Camera.CameraInfo.CAMERA_FACING_BACK;
我有两个问题要问:
1) 如何检测只有前置摄像头的安卓设备。
因为在只有前置摄像头的平板电脑上,如 Micromax 选项卡,currentCameraId 为 0。
2) 如何检查相机闪光灯的可用性,因为以下代码在某些手机上不起作用
flash = this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
请帮忙。
谢谢!
【问题讨论】:
标签:
android
flash
android-camera
android-package-managers
front-camera
【解决方案1】:
检查闪光灯是否可用
boolean hasFlash = getApplicationContext().getPackageManager()
.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
检查相机是否可用
PackageManager pm = context.getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
}
如果您使用 API 级别 9 (Android 2.3) 或更高版本,您可以执行以下操作来计算(第一个)前置摄像头的索引:
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
}
然后您可以使用 Camera.open 的索引
例如
int index = getFrontCameraId();
if (index == -1) error();
Camera c = Camera.open(index);
【解决方案2】:
你可以试试这个
public boolean hasFlash() {
if (camera == null) {
return false;
}
Camera.Parameters parameters = camera.getParameters();
if (parameters.getFlashMode() == null) {
return false;
}
List<String> supportedFlashModes = parameters.getSupportedFlashModes();
if (supportedFlashModes == null || supportedFlashModes.isEmpty() || supportedFlashModes.size() == 1 && supportedFlashModes.get(0).equals(Camera.Parameters.FLASH_MODE_OFF)) {
return false;
}
return true;
}