ページ

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!ブログ

2013/09/06

[Android]assetsとres/rawの違いまとめ

イマイチ違いがわからなかったので調べてみました。
Providing Resources | Android Developers の Table.1 の raw/ についての説明や
Accessing Resources | Android Developersの Access to Original Files によると、
ディレクトリ構造を持たせたかったら assets で、
ビデオやオーディオファイルとかの生データを読み込みたいだけだったら
res/raw を使えって感じみたい。


assets res/raw
ファイルへのアクセス AssetsManager経由など resId(R.raw.filename)をメソッドに渡すなど
ファイル名の制限 なし [a-z_\.]+
拡張子による同名ファイルの区別 拡張子も含めてファイルを区別する 同一のファイル名の場合、
filenameに拡張子が含まれず
区別できないのでエラー
ディレクトリの作成 ◯(アンダーバー始まりのディレクトリはビルドに含まれない) ×
未圧縮ファイルの容量制限 1MB ~ 2MB なし?
アプリからの書き込み × ×
res/raw には 100MB 以上の動画とか入っていてもビルドはできた。
しかし、Google Play は apk 容量が 50MB までなのでリリースができない。

いまいちドキュメントにも書かれていないので俺はメンドいから嫌なので誰か確認用サンプルアプリ作って下さい。

参考:
任意データの置き場所は、/assets or /res/raw? - 整理できない底辺プログラマのメモブログ
[android] rawとassetsの使い分け | uni開発ブログ
Androidアプリ開発Tips「assetsフォルダ内で利用できない名前」 Intelligent Technology's Technical Blog
assetsフォルダには1MB以上の非圧縮ファイルを設置できない - [Androidアプリ/Android] ぺんたん info