在我的应用中,如果设备配备了相机,我想使用相机。是否有任何运行android且没有摄像头的设备?通过将以下内容纳入我的清单:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
基本上就是说“如果有的话我会用相机,但不需要用相机来运行”。
在尝试使用Camera类之前,如何检查设备上是否存在相机?
在我的应用中,如果设备配备了相机,我想使用相机。是否有任何运行android且没有摄像头的设备?通过将以下内容纳入我的清单:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
基本上就是说“如果有的话我会用相机,但不需要用相机来运行”。
在尝试使用Camera类之前,如何检查设备上是否存在相机?
Answers:
我没有尝试过,但是:
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
public class YourActivity extends Activity { Context contextActivity; PackageManager pm; @Override public void onCreate(Bundle savedInstanceState) { ... contextActivity = this; pm = contextActivity.getPackageManager(); ...
要了解您的设备上有多少个摄像机,您可以致电:
import android.hardware.Camera;
int numCameras = Camera.getNumberOfCameras();
if (numCameras > 0) {
hasCamera = true;
}
Camera.getNumberOfCameras()是静态的,因此不需要实际连接到摄像机。从API 9开始有效。
编辑:
使用更新的camera2 API,您还可以调用CameraManager.getCameraIdList(),该列表提供所有有效摄像机ID的列表,而不只是计数。
android.hardware.Camera
不推荐使用?应该使用什么代替此功能?我知道我们现在有android.hardware.camera2
,但是在哪里可以找到替代品getNumberOfCameras
呢?
您应该使用它来查找设备中的相机
public static boolean isCameraAvailable(Context context) {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY);
}
public static boolean isCameraAvailable(Context context) { return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY)) }
不推荐使用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();
}
使用PackageManager.hasSystemFeature()方法检查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;
}
}
来源:https://developer.android.com/guide/topics/media/camera.html#custom-camera
试试这个 :
/** 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;
}
}
试试这个
用于前置摄像头
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");
}
根据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
根据文档,您必须使用“程序包管理器”来检查相机在设备上是否可用
在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项目类中。