ページ

2013/09/14

[Android]Device Administration APIのカメラ無効化とチェック方法


開発している DevCameraCamera の open に失敗する というバグがあったので
確認してみるとリファレンスにはカメラの内部プログラムがクラッシュしているか、
Android4.0 から搭載された端末管理機能でカメラが無効化されている場合に
RuntimeException を投げるらしいです。
Throws
RuntimeException if opening the camera fails (for example, if the camera is in use by another process or device policy manager has disabled the camera).
Camera#open | Android Developers

端末管理機能でカメラが無効化されているかどうかは以下のようにすれば確認できます。
DevicePolicyManager devicePolicyManager = (DevicePolicyManager)getSystemService(DEVICE_POLICY_SERVICE);
boolean isCameraDisabled = devicePolicyManager.getCameraDisabled(null);
DevicePolicyManager#getCameraDisabled | Android Developers

動作テストのため端末管理機能でカメラを無効化できる DisableCamera というアプリを公開しました。
DisableCamera 端末管理機能でカメラを無効化 - Google Play の Android アプリ
ソースコードは GitHub に公開しています。
wada811/DisableCamera - GitHub
参考
Device Administration | Android Developers
DevicePolicyManager | Android Developers
DeviceAdminReceiver | Android Developers
DeviceAdminInfo | Android Developers

まぁ今回のレポートは Android 2.3.3 の端末でのクラッシュだったので
すでにカメラの内部プログラムがクラッシュしていたということでした。
RuntimeException を catch して以下のメッセージを出すようにして対応しました。

参考
[IOエラー] Fail to connect to camera service - ぴろりノート - Yahoo!ブログ