1. onUserLeaveHint() 用户手动离开当前activity,会调用该方法,比如用户主动切换任务,短按home进入桌面等。
系统自动切换activity不会调用此方法,如来电,灭屏等。 如果仅仅是想在HOME键按下后,做些处理,可以复写如下方法
2. 每次点击Home按键时都会发出一个action为Intent.ACTION_CLOSE_SYSTEM_DIALOGS的广播,
它是关闭系统Dialog的广播,我们可以通过注册它来监听Home按键消息
/**
* Home按键监听类
* 使用说明:
* 1、初始化HomeListen
* HomeListen homeListen = new HomeListen( this );
* homeListen.setOnHomeBtnPressListener( new setOnHomeBtnPressListener(){
* @Override
* public void onHomeBtnPress( ){
* // 按下Home按键回调
* }
*
* @Override
* public void onHomeBtnLongPress( ){
* // 长按Home按键回调
* }
* });
*
* 2、在onResume方法中启动HomeListen广播:
* homeListen.start();
*
* 3、在onPause方法中停止HomeListen广播:
* homeListen.stop( );
* */
public class HomeListen {
public HomeListen(Context context) {
mContext = context;
mHomeBtnReceiver = new HomeBtnReceiver( );
mHomeBtnIntentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
}
public void setOnHomeBtnPressListener( OnHomeBtnPressLitener onHomeBtnPressListener ){
mOnHomeBtnPressListener = onHomeBtnPressListener;
}
public void start( ){
mContext.registerReceiver( mHomeBtnReceiver, mHomeBtnIntentFilter );
}
public void stop( ){
mContext.unregisterReceiver( mHomeBtnReceiver );
}
class HomeBtnReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
receive( context, intent );
}
}
private void receive(Context context, Intent intent){
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra( "reason" );
if (reason != null) {
if( null != mOnHomeBtnPressListener ){
if( reason.equals( "homekey" ) ){
// 按Home按键
mOnHomeBtnPressListener.onHomeBtnPress( );
}else if( reason.equals( "recentapps" ) ){
// 长按Home按键
mOnHomeBtnPressListener.onHomeBtnLongPress( );
}
}
}
}
}
public interface OnHomeBtnPressLitener{
public void onHomeBtnPress( );
public void onHomeBtnLongPress( );
}
private Context mContext = null;
private IntentFilter mHomeBtnIntentFilter = null;
private OnHomeBtnPressLitener mOnHomeBtnPressListener = null;
private HomeBtnReceiver mHomeBtnReceiver = null;
系统自动切换activity不会调用此方法,如来电,灭屏等。 如果仅仅是想在HOME键按下后,做些处理,可以复写如下方法
2. 每次点击Home按键时都会发出一个action为Intent.ACTION_CLOSE_SYSTEM_DIALOGS的广播,
它是关闭系统Dialog的广播,我们可以通过注册它来监听Home按键消息
/**
* Home按键监听类
* 使用说明:
* 1、初始化HomeListen
* HomeListen homeListen = new HomeListen( this );
* homeListen.setOnHomeBtnPressListener( new setOnHomeBtnPressListener(){
* @Override
* public void onHomeBtnPress( ){
* // 按下Home按键回调
* }
*
* @Override
* public void onHomeBtnLongPress( ){
* // 长按Home按键回调
* }
* });
*
* 2、在onResume方法中启动HomeListen广播:
* homeListen.start();
*
* 3、在onPause方法中停止HomeListen广播:
* homeListen.stop( );
* */
public class HomeListen {
public HomeListen(Context context) {
mContext = context;
mHomeBtnReceiver = new HomeBtnReceiver( );
mHomeBtnIntentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
}
public void setOnHomeBtnPressListener( OnHomeBtnPressLitener onHomeBtnPressListener ){
mOnHomeBtnPressListener = onHomeBtnPressListener;
}
public void start( ){
mContext.registerReceiver( mHomeBtnReceiver, mHomeBtnIntentFilter );
}
public void stop( ){
mContext.unregisterReceiver( mHomeBtnReceiver );
}
class HomeBtnReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
receive( context, intent );
}
}
private void receive(Context context, Intent intent){
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra( "reason" );
if (reason != null) {
if( null != mOnHomeBtnPressListener ){
if( reason.equals( "homekey" ) ){
// 按Home按键
mOnHomeBtnPressListener.onHomeBtnPress( );
}else if( reason.equals( "recentapps" ) ){
// 长按Home按键
mOnHomeBtnPressListener.onHomeBtnLongPress( );
}
}
}
}
}
public interface OnHomeBtnPressLitener{
public void onHomeBtnPress( );
public void onHomeBtnLongPress( );
}
private Context mContext = null;
private IntentFilter mHomeBtnIntentFilter = null;
private OnHomeBtnPressLitener mOnHomeBtnPressListener = null;
private HomeBtnReceiver mHomeBtnReceiver = null;
}
参考资料 :
http://blog.csdn.net/ekeuy/article/details/39400939
http://blog.csdn.net/u014631944/article/details/51407550