LoginSignup
49

More than 5 years have passed since last update.

Kioskアプリと端末の作り方 ~DroidKaigi2018発表内容の要約+α~

Last updated at Posted at 2018-02-12

はじめに

光栄なことに「Kioskアプリと端末の作り方」というテーマで DroidKaigi 2018 に登壇させて頂きました。
セッションにお越し頂いた方々、ありがとうございました!

本記事は発表内容の要約+オフィスアワーでのお話し、です。

本記事の対象者

本記事の対象者は下記の通りです。

  • セッションに参加したが、その後のオフィスアワーでどのような話があったのか気になる
  • セッションは不参加だが、要点だけをざっくり確認したい

発表動画

発表資料

GIFアニメ無し
https://speakerdeck.com/tomoya0x00/kioskapuritoduan-mo-falsezuo-rifang

GIFアニメ有り(環境によってはちょっとレイアウト崩れるかも)
https://docs.google.com/presentation/d/1K9-Tn13yRAyOmN480DhchDTchVANaUDMn5y4gvRpoLc/edit?usp=sharing

サンプルソース
https://goo.gl/ryz8mX

発表内容の要約

Kiosk端末とは?

  • 特定用途に特化した情報端末
  • 回転寿司屋や居酒屋に設置してあるタッチパネルなど

Kiosk端末の実現方法

  • DeviceOwnerをうまく活用する
    • 端末に様々な制約を課すことが出来る特別な管理者
    • Android 5.0から追加された
    • 基本的に端末の初期化が必要
  • Lock task mode
    • 特定アプリ以外への遷移を制限できる
    • DeviceOwnerで許可されたアプリだけが開始できる
  • 強制的にホームアプリ化
    • DevicePolicyManager#addPersistentPreferredActivity でできる
    • DeviceOwner権限が必要
  • DeviceOwner指定時の注意点
    • 端末のファクトリーリセット後、極力初期設定をスキップすること
    • WiFiやアカウント設定してしまうと、DeviceOwnerの指定に失敗することがある
      • 挙動は端末依存

活用事例紹介

実際のサービスで活用しているDeviceOwnerの機能紹介

  • サイレントインストール
  • ワイプ
  • USBデバッグOFF
  • スクリーンショットOFF

Kiosk端末開発のノウハウ

  • バッテリー残量と電波強度が表示されない
    • Lock task modeではステータスバーが表示されない
    • APIで取得してアプリ内で表示
  • ホームアプリ化すると再起動後にロック画面が表示される
    • 設定でロック画面無しにする
  • Kioskアプリが落ちると他画面に遷移できてしまう
    • 例外処理を横取りして自分自身を再起動させる
  • 端末起動直後のアップデート確認処理が毎回失敗する
    • 端末起動直後はネットワーク接続確立されてないので注意
    • リトライ回数や間隔を増やしましょう
  • ホームアプリ化が解除されない
    • DeviceOwner権限削除前にホームアプリ化解除 or セキュリティ->端末管理アプリからチェック外してadb uninstall
  • デバッグメニューが欲しい
    • Activityの邪魔にならない箇所にデバッグメニュー表示ボタンを置いておく

オフィスアワーでのお話し

※公開するとマズイお話しがある場合、ご連絡ください。

  • セーフモードではKioskアプリの起動を回避できてしまうのでは?
    • いいえ。回避は出来ず、Kioskアプリが起動します。
    • この回答は自分では無く、 DroidKaigi 2018 サポーター アイキューブドシステムズ 所属のエンジニア様が答えてくださいました!ありがとうございます。
  • ユーザー様側でKiosk端末化をお願いすることはできそうか?
    • NFCを使えばワンタッチでKiosk化できるみたいですが、試せていません。
    • 弊社では端末セットアップ手順書を作成し、キッティング作業を専用の会社様に委託しています。
  • Kioskアプリ自体をサイレントインストールでアップデートできるか?
    • 今回のサンプルソースでは試せていませんが、できると思います。
  • オフィスアワーで電源ボタン無効化の話題があったが、電源ボタンの長押しを onWindowFocuschanged() で検出(電源オフするか確認のダイアログが表示されるので)し、自分自身を起動することで回避できる。
    • 株式会社東京 のエンジニア様に教えていただきました!ありがとうございます!

最後に

発表準備は大変(公の場での発表はこれまで5分LTだけだったので)でしたが、
皆様からのフィードバックを頂き「発表して良かった!」という気持ちが強いです。
(特にKiosk化の苦労を分かち合えたのが嬉しい)

また、逆に開発ノウハウを教えて頂く事もあり、「情報を発信すると情報が集まってくる」を実感いたしました。

次はもっとうまく発表できるように頑張ります!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49