首页 > 代码库 > 捕获home按键

捕获home按键

原理:onKeyDown和onKeyUp方法是无法捕获home按键的。按home按键程序并没有退出(窗口的生命周期执行到onStop方法,参见Activity生命周期博文的介绍)只是切换到后台运行了。而按下back按键或者调用finish方法则关闭当前的程序,当前窗口的生命周期也就结束了。系统会在调用onDestory方法后释放窗口对象(但一些资源并未释放,如静态变量),按home和back键都执行的最后一个方法是onStop,所以很容易想到在onStop方法中处理按home键的动作;由于窗口不管以任何方式关闭,都会调用Activity.finish方法,而且该方法是在调用窗口生命周期方法之前就调用了,也就是说调用onPause方法之前会首先调用finish方法,而按下home键系统并不会调用finish方法,所以覆盖finish方法,并在finish方法中设置标志即可解决这个问题。

package com.example.showdatetime1;

import com.example.showdatetime3.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {
	
	
	private boolean isFinished;


	private static final String TAG = "MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
	}

	@Override
	protected void onStart() {
		
		Toast.makeText(this, "窗口已经恢复", 0).show();
		
		super.onStart();
	}
	
	@Override
	protected void onStop() {
		
		if (!isFinished) {
			Toast.makeText(this, "按下了home按键", 0).show();
		}
		
		super.onStop();
	}
	
	@Override
	public void finish() {
		isFinished = true;
		super.finish();
	}
	
}


捕获home按键