有什麼方法可以檢查相機是否打開?我不想打開相機,我只想檢查其狀態。如何檢查相機是否被任何應用程序打開
回答
您可以使用方法Camera.open(cameraId)
進行檢查。
創建一個新的Camera對象來訪問特定的硬件攝像頭。如果相同的相機被其他應用程序打開,則會引發RuntimeException。
拋出 的RuntimeException
如果打開相機失敗(例如,如果照相機是在通過另一過程或設備策略管理器使用已禁用相機)。
更新:
例子:
public boolean isCameraUsebyApp() {
Camera camera = null;
try {
camera = Camera.open();
} catch (RuntimeException e) {
return true;
} finally {
if (camera != null) camera.release();
}
return false;
}
您可以使用此方法使用,因爲保羅建議,但記住這件事記住,此方法首先獲取攝像機。
如果它成功獲取,則意味着沒有其他應用程序正在使用本相機,並且不會忘記再次釋放它,否則您將無法再次獲取它。
其投擲RuntimeException
這意味着相機正在被其他進程或設備策略管理器禁用相機。
展望the source code of Camera,its JNI counterpart,最後the native code用於連接相機與服務,似乎確定相機在使用中的唯一方法是直接通過的Camera::connect(jint)
結果。
問題在於,只能通過JNI功能android_hardware_Camera_native_setup(JNIEnv*, jobject, jobject, jint)
來訪問此本機代碼,該代碼設置攝像頭以便在從new Camera(int)
的Java創建Camera實例時使用。
總之,這似乎不可能。您必須嘗試打開相機,如果失敗,則認爲它已被其他應用程序使用。例如: -
public boolean isCameraInUse() {
Camera c = null;
try {
c = Camera.open();
} catch (RuntimeException e) {
return true;
} finally {
if (c != null) c.release();
}
return false;
}
爲了更好地瞭解相機的原生代碼,see this thread底層流。
如果您的設備API版本高於21,CameraManager.AvailabilityCallback
可能是一個不錯的選擇。
您需要首先獲得系統的相機管理用下面的代碼:
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
然後,你需要註冊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);
}
這個工作,如果API版本更好高於21。你可以參考CameraManager,CameraManager.AvailabilityCallback和whole package
試圖打開攝像頭,以檢查是否異常被拋出的作品好,如果API級別低於23 API等級23,攝像服務比以前不同,從official docs:
訪問照相機子系統的資源,包括開口和配置相機裝置,授予基於客戶端應用程序的「優先級」。具有用戶可見或前景活動的應用程序進程通常被賦予更高優先級,使得相機資源獲取和使用更可靠。
當較高優先級的應用程序嘗試使用相機時,較低優先級應用程序的活動相機客戶端可能會被「驅逐」。在棄用的Camera API中,會導致爲被驅逐的客戶端調用onError()。在Camera2 API中,它會爲被驅逐的客戶端調用onDisconnected()。
我們可以看到,在API 23或更高,試圖打開其他應用程序所使用的攝像頭/過程將抓住從應用程序/過程,其使用的不是得到RuntimeException
它,相機。
- 1. 檢查文件是否在任何應用程序中打開
- 2. 如何檢查Facebook是否被打開
- 3. 如何檢查Android應用程序是否第一次打開
- 4. 檢查相機是否打開?
- 5. 檢查是否有任何UserControl打開
- 6. 如何檢查麥克風是否被任何背景應用程序使用
- 7. 如何監控應用程序是否被打開?
- 8. Windows - Python,檢查程序是否打開,如果是,從任務欄打開它?
- 9. 如何檢查相機應用程序是否是服務的活動活動?
- 10. 如何檢測某個其他應用程序是否被點擊打開? (vb.net)
- 11. 如何從iPhone中的本機應用程序打開相機?
- 12. 如何檢查我的fb應用程序是否被禁止?
- 13. 如何檢查特定打印機是否被調用?
- 14. Python/win32com - 檢查程序是否打開
- 15. 如何檢查手機上是否有應用程序?
- 16. 如何在Flex應用程序中檢測相機是否已被其他應用程序使用?
- 17. 如何檢查相機閃光燈是打開還是關閉?
- 18. 如何檢查窗體是否有任何ShowDialog()窗體打開?
- 19. 檢測相機是否已打開
- 20. 檢查程序是否打開。如果沒有,打開它
- 21. 如何通過MAC OS中的Automator檢查應用程序是否打開?
- 22. 如何檢查應用程序是否在瀏覽器會話中打開?
- 23. iOS檢查相機是否被遮擋
- 24. Phonegap應用程序未打開相機
- 25. 如何檢查GPRS/3G是否打開?
- 26. 如何檢查文件是否打開
- 27. 如何檢查tsqlconnection是否打開?
- 28. 如何檢查jframe是否打開?
- 29. 如何檢查sql_safe_updates是否打開?
- 30. 如何檢查文件是否打開