Có cách nào để kiểm tra xem máy ảnh có đang mở hay không? Tôi không muốn mở máy ảnh, tôi chỉ muốn kiểm tra trạng thái của máy ảnh.Cách kiểm tra xem máy ảnh có được mở bằng bất kỳ ứng dụng nào không
Trả lời
Bạn có thể kiểm tra bằng phương pháp Camera.open(cameraId)
.
Tạo đối tượng Máy ảnh mới để truy cập máy ảnh phần cứng cụ thể. Nếu cùng một máy ảnh được mở bởi các ứng dụng khác, điều này sẽ ném một RuntimeException.
Ném RuntimeException
Nếu mở máy ảnh bị lỗi (Ví dụ, nếu máy ảnh được sử dụng bởi một quá trình hoặc chính sách thiết bị quản lý đã vô hiệu hóa máy ảnh).
Cập nhật:
Ví dụ:
public boolean isCameraUsebyApp() {
Camera camera = null;
try {
camera = Camera.open();
} catch (RuntimeException e) {
return true;
} finally {
if (camera != null) camera.release();
}
return false;
}
Bạn có thể sử dụng phương pháp này để sử dụng như Paul đề nghị nhưng giữ điều này trong tâm trí rằng phương pháp này đầu tiên mua máy ảnh.
Nếu ứng dụng của nó thành công thì điều đó có nghĩa là không ứng dụng nào khác đang sử dụng máy ảnh này và không quên phát hành lại nếu không bạn sẽ không thể lấy lại.
Nó ném RuntimeException
nó có nghĩa là máy ảnh đang được sử dụng bởi một quy trình hoặc trình quản lý chính sách thiết bị khác đã tắt máy ảnh.
Nhìn vào the source code of Camera, its JNI counterpart, và cuối cùng the native code để kết nối một máy ảnh với dịch vụ, có vẻ như cách duy nhất để xác định nếu máy ảnh được sử dụng là trực tiếp thông qua kết quả của Camera::connect(jint)
.
Sự cố là mã gốc này chỉ có thể truy cập thông qua chức năng JNI android_hardware_Camera_native_setup(JNIEnv*, jobject, jobject, jint)
, thiết lập máy ảnh để sử dụng khi tạo cá thể Máy ảnh từ Java trong new Camera(int)
.
Tóm lại, dường như không thể. Bạn sẽ phải cố gắng để mở máy ảnh, và nếu nó không thành công, giả sử nó đang được sử dụng bởi ứng dụng khác. Ví dụ:
public boolean isCameraInUse() {
Camera c = null;
try {
c = Camera.open();
} catch (RuntimeException e) {
return true;
} finally {
if (c != null) c.release();
}
return false;
}
Để hiểu rõ hơn dòng gốc của mã gốc của máy ảnh, see this thread.
Nếu phiên bản API thiết bị của bạn cao hơn 21, CameraManager.AvailabilityCallback
có thể là lựa chọn tốt.
Bạn cần phải đầu tiên được người quản lý camera của hệ thống với đoạn mã sau:
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
Sau đó, bạn cần phải đăng ký AvailabilityCallback
:
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
manager.registerAvailabilityCallback(new CameraManager.AvailabilityCallback() {
@Override
public void onCameraAvailable(String cameraId) {
super.onCameraAvailable(cameraId);
//Do your work
}
@Override
public void onCameraUnavailable(String cameraId) {
super.onCameraUnavailable(cameraId);
//Do your work
}
}, yourHandler);
}
này hoạt động tốt hơn nếu phiên bản API cao hơn 21.Bạn có thể tham khảo CameraManager, CameraManager.AvailabilityCallback và whole package
Đang cố gắng để mở camera để kiểm tra xem ngoại lệ được ném hoạt động tốt nếu mức API thấp hơn 23. Trong mức API 23, dịch vụ camera khác so với trước đây, từ số official docs:
Truy cập vào tài nguyên hệ thống phụ của máy ảnh, bao gồm mở và định cấu hình thiết bị camera, được trao dựa trên "ưu tiên" của quy trình đăng ký ứng dụng khách. Các quy trình ứng dụng với các hoạt động có thể nhìn thấy hoặc tiền cảnh thường được ưu tiên cao hơn, giúp việc mua lại tài nguyên máy ảnh và sử dụng đáng tin cậy hơn.
Các ứng dụng máy ảnh hiện hoạt cho các ứng dụng có mức ưu tiên thấp hơn có thể bị "gỡ bỏ" khi ứng dụng ưu tiên cao hơn cố gắng sử dụng máy ảnh. Trong API Camera không được chấp nhận, điều này dẫn đến onError() được gọi cho ứng dụng bị gỡ bỏ. Trong API Camera2, kết quả là onDisconnected() được gọi cho ứng dụng bị gỡ bỏ.
Chúng tôi có thể thấy rằng trong API 23 trở lên, cố gắng mở máy ảnh được ứng dụng/quá trình khác sử dụng sẽ thu giữ máy ảnh từ ứng dụng/quá trình đang sử dụng nó thay vì nhận RuntimeException
.
- 1. Cách kiểm tra xem URI yêu cầu có bất kỳ tham số nào không
- 2. Làm cách nào để biết ứng dụng nào được mở bởi ứng dụng bất kỳ lúc nào?
- 3. Kiểm tra xem một giá trị có bằng bất kỳ giá trị nào trong một mảng
- 4. Có bất kỳ ứng dụng mẫu ứng dụng nào của Google được viết bằng Java không?
- 5. Python - Cách kiểm tra xem tệp có được ứng dụng khác sử dụng không?
- 6. Có bất kỳ máy chủ hình ảnh độc lập mã nguồn mở nào tồn tại không?
- 7. Kiểm tra xem tệp có đang được sử dụng hay ứng dụng nào không?
- 8. Cách dễ nhất để kiểm tra xem chuỗi có chứa bất kỳ thẻ hình ảnh nào không?
- 9. Kiểm tra xem có bất kỳ thay đổi đang chờ xử lý nào để được lưu
- 10. Cách kiểm tra phiên bản html bất kỳ ứng dụng web nào đang sử dụng?
- 11. Cách kiểm tra xem JCheckBox có được kiểm tra không?
- 12. jQuery kiểm tra xem có bất kỳ đầu vào nào đã chọn trống không
- 13. Bất kỳ cách nào khác để kiểm tra xem nhà cung cấp vị trí mạng có được bật không?
- 14. MSVC - Bất kỳ cách nào để kiểm tra xem chức năng có thực sự được gạch chân không?
- 15. Mở bất kỳ tệp nào bằng VBScript
- 16. Tôi có phải kiểm tra LSRequiresIPhoneOS để tìm hiểu xem máy ảnh có khả dụng không?
- 17. Sử dụng Java Regex, cách kiểm tra xem chuỗi có chứa bất kỳ từ nào trong tập hợp không?
- 18. Có bất kỳ ví dụ nào về ứng dụng iOS được viết bằng PyObjC không?
- 19. kiểm tra xem hộp kiểm có được chọn hay không bằng cách sử dụng jquery
- 20. Cách kiểm tra xem Liên hệ có hình ảnh không?
- 21. Kiểm tra xem ứng dụng có đang mở trong sự kiện GCM onMessage không?
- 22. Kiểm tra xem bất kỳ thuộc tính nào đã được gán giá trị
- 23. Kiểm tra xem tập hợp nút có chứa bất kỳ giá trị nào trong XSLT
- 24. Kiểm tra xem chuỗi có chứa bất kỳ chuỗi nào trong một mảng
- 25. Làm cách nào để kiểm tra xem tập lệnh Perl không có bất kỳ lỗi biên dịch nào?
- 26. Làm cách nào để kiểm tra xem điểm lặp STL có ở bất kỳ điểm nào không?
- 27. Làm cách nào để kiểm tra xem ArrayList có chứa bất kỳ phần tử nào của một ArrayList khác không?
- 28. kiểm tra xem một mảng có chứa bất kỳ mục nào từ mảng khác
- 29. Kiểm tra xem bất kỳ giá trị nào của từ điển có khớp với điều kiện
- 30. Kiểm tra xem chuỗi có khoảng trắng ở giữa (hoặc bất kỳ vị trí nào)