«

»

10月 26

AndroidでHomeボタンを無効化する方法

AndroidでHomeボタンを無効化する方法Androidを業務用として使う場合、起動してから自動で特定のアプリを起動して、通常のホーム画面には移動できないようにしたい場合がある。
最初はホームボタン押下のイベントを拾って無効化したらいいのかと思ったら、Androidの仕様でホームボタンほか数個のイベントは不正防止のため取得できないようになっているみたい。
参考:戻るボタンを無効にする

どうにかならんもんかと色々調べていたらホームボタンにはホームアプリを割り当てられるから、常時起動したいアプリをホームアプリ化させたらいいらしいとわかった。
ホームアプリの作り方を調べていたら下のページに行き着いた。
http://ameblo.jp/androiddev/entry-10778958242.html
このページのよると次のように書かれている。

※※以下超重要
上記インテントフィルタを安易に実装するのは危険
なぜなら、ホーム機能のまったく実装していないアクティビティをホームと置き換える可能性がある

こうなるとデフォルト設定を変更しようにも、設定画面に遷移できないため

(メニューボタンを押された際の挙動も、ホームアプリに記述されている)
ホーム画面から何も出来ない、元にも戻せないデッドロック状態に陥る場合がある

おー、本来危険視すべきだけど自分にとっては求めていた動作だ!

ということで、参考通りにManifestを変更

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <category android:name="android.intent.category.HOME" />
   <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

ついでに、先人の助言通りに設定に飛べるようにする(とりあえずテストなんで適当にボタンに割り当てる)
設定画面に飛ぶためにはボタンのOnClickのイベントリスナに次のように記述すると良い。
実業務で使うときはこのボタンを押せるのは管理者だけで、パスワードでも入力しないといけないとかすればいいんじゃないかな?

Intent intent = new Intent("android.settings.SETTINGS");
intent.setAction(android.provider.Settings.ACTION_SETTINGS);
startActivity(intent);

これでボタンクリックで設定画面に飛べるようになったので、ホームボタンにアプリを割り当てるようにする。
最初にデフォルトランチャー以外のアプリが割り当てられていたら、設定→アプリケーション→アプリケーションの管理から割り当てられているアプリを選択して「デフォルトでの使用」を解除する。(ココらへんは他に参考山ほどあるから割愛)
んで、ホームボタンをクリックすると選択画面が出てくるから、下側のチェックとアプリを選択する。
これでホームボタンを押すとアプリが起動するようになる。
この状態ではまだ戻るボタンを押したらランチャー画面に戻ったりする。
でも再起動すると戻る先のアクティビティがない(一番初めにホーム設定したアプリが起動する)ので指定のアプリ以外は起動できないようになる。
アプリの構成によっては(戻るボタンを使わないとき)は戻るボタン自体を上記最初の参考ページに従って無効化してもいいかも。

この構成でアプリを作成してテストしてみたら、タスクバー上の通知を選択することでメニュー等に飛べてしまうことが判明
ってことでフルスクリーンモードにしてタスクバーを非表示にした。
Manifestのapplicationタグ内に以下の設定を追加(4行目のthemeの設定)

<application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >

これでタスクバーも消えるので設定ボタンからしか他の画面に飛べなくなった。
以上で説明は終わるけど、検証していないので不具合が起きても責任は取れないよ…
電池残量低下通知とか出てきたらどうなるんだろう…
そこから設定に飛べるボタンあったような気もするし
そもそも、タスクバー消したからって通知が表示されなくなるのかな?
一瞬だけ表示されたりとかしそうだな…

ところで、今回はたまたま望んでいた動作するから良かったんだけど、通常アプリでホーム画面割り当てれるようにしてしまった場合どうするんだろう。
間違ってホーム設定してしまったら抜け出せなくなりそうだけど…
ひとつくらいマーケットに落ちていてもおかしくないよなぁ…


«

»

コメントを残す

メールアドレスが公開されることはありません。

次の HTMLタグおよび属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">