2010年10月2日土曜日

Android Home キーが押されたことを検知する。

Android で ホームキー (Home Key) を検知する方法はないものかと

Activity のメソッドを見ていて

 protected void onUserLeaveHint()

というのを見つけました。

------

Called as part of the activity lifecycle when an activity is about to go into the background as the result of user choice. For example, when the user presses the Home key, onUserLeaveHint() will be called, but when an incoming phone call causes the in-call Activity to be automatically brought to the foreground, onUserLeaveHint() will not be called on the activity being interrupted. In cases when it is invoked, this method is called right before the activity's onPause() callback.

This callback and onUserInteraction() are intended to help activities manage status bar notifications intelligently; specifically, for helping activities determine the proper time to cancel a notfication.

---

Activity のライフサイクルの一部として、Activity が ユーザーの選択の結果 background に行くときに呼ばれる。例えば、ユーザーが Home key を押したとき onUserLeaveHint() が呼ばれる。しかし、着信によって in-call Activity が自動で foreground に来るような場合は onUserLeaveHint() は呼ばれない。onUserLeaveHint() は onPause() の直前に呼ばれる。

このコールバックと onUserInteraction() は Activity がステータスバーの notification を賢く処理するために意図されたものである。特に、Activity が notification をキャンセルする適切な時間を決定するための指標となる。

---

で、試してみた。


-- Launcher から起動 --

onApplyThemeResource(Resources.Theme theme, int resid, boolean first)

onCreate()

onWindowAttributesChanged (WindowManager.LayoutParams params)

onContentChanged()

onStart()

(*onRestoreInstanceState(Bundle))

onPostCreate(Bundle)

onResume()

onPostResume()

onAttachedToWindow()

onWindowFocusChanged (boolean hasFocus) : true

-- home key 押下 --

onUserInteraction()

onUserLeaveHint()

onSaveInstanceState()

onResume()

onPostResume()

onWindowFocusChanged (boolean hasFocus) : false

onCreateDescription() : null

onStop()

-- Home key 長押しから起動 --

onRestart()

onStart()

onResume()

onWindowFocusChanged (boolean hasFocus) : true

-- Back key で終了 --

onUserInteraction()

onResume()

onWindowFocusChanged (boolean hasFocus) : false

onStop()

onDestroy()

onDetachedFromWindow()

-- Launcher から起動 --

onApplyThemeResource() : resid = 16973829, first = true

onCreate()

onWindowAttributesChanged (WindowManager.LayoutParams params)

onContentChanged()

onStart()

onResume()

onAttachedToWindow()

onWindowFocusChanged (boolean hasFocus) : true




 確かに Home key を押したときは呼ばれていて、
 Back key を押したときは呼ばれていない。


 

2 件のコメント:

  1. 初めまして、通りすがりの Android エンジニアです。
    以下の記述の一部が違ってたようです。

    -- home key 押下 --
    onUserInteraction()
    onUserLeaveHint()
    onSaveInstanceState()
    onResume() <<<< onPause()
    onPostResume() <<<< 不要
    onWindowFocusChanged (boolean hasFocus) : false
    onCreateDescription() : null
    onStop()
    -- Home key 長押しから起動 --

    返信削除