很多时候需要监听到手机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
网友评论