Android 按下Home键

很多时候需要监听到手机home键按下,然后再当app打开的时候,这个时候需要触发一些事件,但是怎么去判断手机是home键按下后的结果呢?首先从Activity的生命周期来看,按下home键会走OnStop()这个生命周期方法,当然当唤醒的时候会走onResume()方法,但是在应用程序中有多个activity,如果在baseActiviyt里面来判断,那就肯定是不行的。那么就要运用到下面的方法了。

方法一:写一个广播接受者,在安卓里面触发一些系统的事件肯定会有广播的。

classHomeKeyEventBroadCastReceiverextendsBroadcastReceiver {

staticfinalString SYSTEM_REASON ="reason";

staticfinalString SYSTEM_HOME_KEY ="homekey";//home key

@Override

publicvoidonReceive(Context context, Intent intent) {

String action = intent.getAction();

if(action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {

String reason = intent.getStringExtra(SYSTEM_REASON);

if(reason !=null) {

if(reason.equals(SYSTEM_HOME_KEY)) {

// home key处理点

这里就是按下了home键做个flag标记

}

}

}

}

}

记得要去regist这个广播哦,然后在base的OnResume()方法里面去判断那个标记,如果是按下了home键就去处理想要的事件。

方法二:

publicclassSystemUtils {

publicstaticbooleanisActive=false;

publicstaticbooleanisForeGround(Context context){

booleanisTopStack=false;

ActivityManager am= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

List tasks=am.getRunningTasks(1);

if(!tasks.isEmpty()){

ComponentName topActivity =tasks.get(0).topActivity;

if(topActivity.getPackageName().equals(context.getPackageName())){

isTopStack=true;

}

}

PowerManager pm= (PowerManager) context.getSystemService(Context.POWER_SERVICE);

booleanisScreenOn=pm.isScreenOn();

returnisTopStack&&isScreenOn;

}

}

在BaseActivity的onstop()方法

@Override

protectedvoidonStop() {

super.onStop();

if(!SystemUtils.isForeGround(this)){

SystemUtils.isActive=false;

}

}

@Override

protectedvoidonResume() {

super.onResume();

if(!SystemUtils.isActive&&!issplashOne){

SystemUtils.isActive=true;

//同样处理想要的事件

}

}

csdn项目地址:http://blog.csdn.net/greatdaocaoren/article/details/75009580

你可能感兴趣的:(Android 按下Home键)