デフォルトホームアプリのデフォルト設定解除
ホームアプリのデフォルト設定を外す方法は
設定→アプリケーション→アプリケーションの管理→(該当アプリ名を選択)→デフォルトでの起動項目を消去
ただし、この方法ではデフォルトでインストールされているホームアプリを選択することが出来ない
(そもそも選択肢に表示されない)
デフォルトでインストールされているホームアプリのデフォルト設定を外す方法は
設定→アプリケーション→アプリケーションの管理
までは一緒
そこからメニューボタンを押して
フィルタ→実行中
を押す
この操作で実行中のアプリケーションが表示されるので
選択肢のなかからホームを選択、デフォルトでの起動項目を消去すればいい
ホームアプリの作り方(2)
前回の続き
ホームアプリのテストをする際に、設定画面に遷移できる方法が無いとなんか怖い
というわけで
以下は
・メニューボタンを押されたら、アイテムとして設定への遷移が含まれるメニューを表示
・設定アイテムが押されたら、設定画面へ遷移
という最低限の機能を設定する方法
アクティビティに以下を追加
private static final int MENU_SETUP_ID = Menu.FIRST ;
//メニューのオーバーライド
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//項目を追加
menu.add(0, MENU_SETUP_ID, 0, "設定");
return super.onCreateOptionsMenu(menu);
}
//メニュー選択時のオーバーライド
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_SETUP_ID:
//設定画面へのインテント
Intent intentSetup = new Intent("android.settings.SETTINGS");
startActivity(intentSetup);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
※必要なimportは適宜オートフィックスで追加すること
やっていることは
・メニューの記述
・設定の呼び出し
の二つ
メニューの作成(onCreateOptionsMenu())とメニューの選択(onOptionsItemSelected())
それぞれに必要な内容をオーバーライドしてある
メニューのアイテム(選択肢/ボタン)を一つ追加して
そのボタンを押された場合のハンドラを記述している
設定の呼び出しにはインテントを使用
android.settings.SETTINGSは設定を指定している
これで一応デフォルトホームに戻れるようになったハズ
操作は
設定→アプリケーション→アプリケーションの管理→(該当アプリ名を選択)→デフォルトでの起動項目を消去
これでデフォルト起動設定が消えるので、ホームボタンを押したときに再度選択肢が出るようになる
最低限の復旧方法はキープしたので
あとはホームアプリの機能を実装していけばいい訳だ
ホームアプリの作り方調べ(1)
前回の日報で触れたホームアプリ作り方を調べてみた
※※以下の内容はシステム異常の危険を伴うので注意すること
実際に確かめてみると以下のような記述が必要
<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>
上記の記述がアプリのインテントフィルタにある場合
インテントはHomeボタンの選択肢としてアプリを認識する
Homeボタンを押した場合、選択肢が表示(Homeおよび該当アプリ)される
チェックボックスをチェック後に選択した場合は、以後それがデフォルト設定として用いられる
デフォルト設定の変更は、設定→アプリケーションから変更
※※以下超重要
上記インテントフィルタを安易に実装するのは危険
なぜなら、ホーム機能のまったく実装していないアクティビティをホームと置き換える可能性がある
こうなるとデフォルト設定を変更しようにも、設定画面に遷移できないため
(メニューボタンを押された際の挙動も、ホームアプリに記述されている)
ホーム画面から何も出来ない、元にも戻せないデッドロック状態に陥る場合がある
USBデバッグの場合は、インテントフィルタを元に戻して再度デバッグを開始すれば元に戻せるが
ファイル転送後にローカルで実行してしまった場合などは、戻す方法が思いつかない
最悪、PCからシステム復元しなければいけない可能性もある
マジ怖かったっす
ちなみに、デフォルトHomeからホームアプリを呼び出した場合(デバッグの初回の起動など)は
デフォルトHomeが生きている状態なので、ホームアプリからBackボタンを押すと、デフォルトHomeに戻る
よって、テストアプリだろうと、少なくとも設定画面に遷移できる口を作っておかないと危険と言う訳
たぶんメニュー(設定?)のインテントを使えばいいんだと思うけれども
時間切れにて以降にもちこし