Có cách nào để tìm máy ảnh Android Máy ảnh đang được sử dụng trong mã không?Làm cách nào để tìm máy ảnh đang được sử dụng?
Trả lời
Có cách nào để tìm máy ảnh Android đang được sử dụng không?
Vâng, Camera.open()
sẽ cung cấp cho bạn một ngoại lệ nếu Camera là sử dụng.
Từ docs,
/** A safe way to get an instance of the Camera object. */
public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open(); // attempt to get a Camera instance
}
catch (Exception e){
// Camera is not available (in use or does not exist)
}
return c; // returns null if camera is unavailable
}
Tôi không biết tại sao câu hỏi này đã được hỏi nhiều lần, một khi bạn bắt đầu hoạt động của riêng bạn hoặc máy ảnh ứng dụng riêng của mình sẽ được phát hành dưới dạng hoạt động chạy cho máy ảnh sẽ đi trong trạng thái tạm dừng.
Tôi biết đây là một câu hỏi thực sự cũ, nhưng tôi tình cờ gặp nó với một tìm kiếm google tự hỏi về điều tương tự. Với các phiên bản Android mới hơn, bạn có thể đăng ký CameraManager.AvailabilityCallback
để xác định xem máy ảnh có đang được sử dụng hay không. Dưới đây là một số mã ví dụ:
import android.hardware.camera2.CameraManager;
// within constructor
// Figure out if Camera is Available or Not
CameraManager cam_manager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
cam_manager.registerAvailabilityCallback(camAvailCallback, mHandler);
CameraManager.AvailabilityCallback camAvailCallback = new CameraManager.AvailabilityCallback() {
public void onCameraAvailable(String cameraId) {
cameraInUse=false;
Log.d(TAG, "notified that camera is not in use.");
}
public void onCameraUnavailable(String cameraId) {
cameraInUse=true;
Log.d(TAG, "notified that camera is in use.");
}
};
Lưu ý, có lỗi trong Android 5.1 có thể bị lỗi - https://code.google.com/p/android/issues/detail?id=164769. Đối với các phiên bản này, bạn sẽ phải gọi '' 'cam_manager.getCameraIdList()' '' để dịch vụ được khởi tạo đúng cách trước khi bạn có thể registerAvailabilityCallback. – PressingOnAlways
Bạn có thể thử phương pháp này.if nó trả về true khi máy ảnh vẫn đang được một số ứng dụng sử dụng.
public boolean isCameraUsebyApp() {
Camera camera = null;
try {
camera = Camera.open();
} catch (RuntimeException e) {
return true;
} finally {
if (camera != null) camera.release();
}
return false;
}
Sau đó hiển thị bánh mì nướng cho người dùng khởi động lại thiết bị khi máy ảnh cần khởi động lại.
Cảm ơn.Nếu thấy máy ảnh đã được sử dụng thì tôi có thể sử dụng máy ảnh như thế nào? Có quyền phát hành máy ảnh trong khối catch và sau đó một lần nữa cố gắng mở nó? – user1414146
@ user1414146 Bạn phải chờ cho đến khi ứng dụng khác được thực hiện với máy ảnh :) và sau đó thử lại. – COD3BOY