题
在我的应用程序,我想使用相机时,如果该设备具有一个。是否有运行Android版的任何设备不的有一个摄像头?通过包括以下到我的清单:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
然后它基本上说:“我会用相机如果存在的话,但不需要一个运行应用程序”。
我如何可以检查是否存在设备上的摄像头,尝试使用相机前级?
解决方案
我还没有尝试过,但:
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,您也可以拨打 CameraManager.getCameraIdList(),这给所有有效的摄像机ID的列表,而不是只计数。
您应该使用它来找到相机在你的设备
public static boolean isCameraAvailable(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
使用的 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/媒体/ 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");
}
作为每文档,必须使用包管理器来检查是否摄像机是在设备上可用或不
<强>在Java:强>
final boolean isCameraAvailable = getPackageManager().hasSystemFeature(FEATURE_CAMERA);
<强>在科特林:强>
val isCameraAvailable = packageManager.hasSystemFeature(FEATURE_CAMERA)
我在Android的电视盒,你可以即插即用的USB摄像头多次找到。在一定的时间点时,相机开始服务说,它检测到一个摄像系统,同时相机没有连接到系统。这种情况发生时,你在输入/输出摄像机插上的次数。为了解决这个问题,我发现这个溶液工作:
//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;
}
}
参见更多有关相机API:点击 HTTPS ://developer.android.com/guide/topics/media/camera.html#detect-camera