Tech Sketch Bucket of Technical Chips by TIS Inc.

機種ごとに違う!?Android端末におけるデバイス活用の問題点

Pocket

高機能なAndroid端末が普及し、GPSやカメラ、加速度センサー等を活用したアプリケーションを作成出来る下地が揃ってきました。
弊社で開発・提供を行っているSkyWareも、これらのデバイスを活用してARによるナビゲーションを行っています。

AndroidはオープンでフリーなOSであり、スマートフォン市場で多くのシェアを獲得しています。
しかし、オープンでフリーなOSであるがゆえに、

  1. 各メーカーでハードウェア構成が異なり
  2. OSのカスタマイズを行っている場合があり
  3. Wintelのような安定さが無く
  4. 機種によってアプリ側のプログラム変更で対応しなければならない

という場面が存在するのです。

本記事では、SkyWareの開発で浮かび上がったAndroid開発の問題点をご紹介します。


カメラの活用

カメラの使用については、Google社が提供しているデモプログラム集でコードが紹介されています。そのコードをビルドするだけで、簡単なカメラアプリ(カメラのプレビューを画面に表示するだけのアプリ)を動かすことが出来ます。
しかし、様々な機種が発売されるにつれ、そのデモアプリが動作しない機種が現れ始めました。OS2.3が発売され始めた頃からです。(正常に動作するOS2.3の機種もあります)
では、なぜ動かないのか。

カメラのデモアプリでは、大きく次の手順を行っていました。

  1. カメラデバイスをオープンする
  2. プレビューするサイズを指定する
  3. 撮影サイズを指定する

この「2」が悪さをしています。
デモアプリが動かない機種では、「2」の前に『使用可能なプレビューサイズ一覧を明示的に取得し、使用するサイズを選択する』という作業が必要になります。この作業が入ることで、多くの機種でカメラを動かすことが出来ます。
(実はこの『使用可能なプレビューサイズ一覧を明示的に取得し、使用するサイズを選択する』という動作、OS2.3以上のデモプログラムには"しれっと"入っています。バージョンが変わるごとに全てのデモプログラムを見直すわけにもいかないですし・・・厳しい;)

しかし、これで全ての機種が動くわけではありません。
『使用可能なプレビューサイズ一覧を明示的に取得し、使用するサイズを選択する』という作業を行ったにも関わらず、何故か動かない機種があるのです。
それは、プレビューで使用出来ないサイズが「使用可能なプレビューサイズ」として取得されるためです。取得できた値を信用すると、動きません・・・(端末自体のバグ?)

そのような機種の場合はどう対応するか。
それは、『プレビュー出来なそうなサイズである場合、プレビュー出来そうなサイズを設定する』という対策コードを記述して対応します。

これらのコードにより、ほぼ全ての端末で動作可能なカメラアプリを作成することが出来ます。

方位センサー

方位センサー・傾きセンサーについても、端末によって返される値を意識する必要があります。
今回は、方位センサーを利用する際の注意点に絞ってご紹介します。

方位センサーから値を取得した場合、多くの端末では「端末の上側がどの方向を向いているか」の値を返してくれます。これは、スマートフォン/タブレット共にそうです。

Android1.PNG

しかし、「横向き専用のアプリ」を動かす場合はどうでしょうか。
スマートフォンを横向きにした場合、端末の左側(=端末の上側)が方位センサーの基準になります。

Android2.PNG

つまり、横向き専用のアプリをスマートフォンとタブレットで動かした場合、取得出来る値が90度ズレてしまうわけです。

現時点では、OS3.xはタブレット用OSになっていますので、『OS3.xの端末である場合、方位センサーの値を90度ズラす』という対策を取ります。
OS4.xはスマートフォンとタブレットのどちらでも使用できるOSになる予定ですので、更に別の対策が必要になると考えられます。

結論(感想)

AndroidはJava開発ですので、通常の処理部分に機種依存はありません。
しかし、デバイスを使用する場所では機種依存が発生します。
大変ですが、なるべく多くの機種で動作するように、意識してコーディングするよう心がけましょう。

エンジニア採用中!私たちと一緒に働いてみませんか?