Android 按下Home键

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

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

    class HomeKeyEventBroadCastReceiver extends BroadcastReceiver {  
      
        static final String SYSTEM_REASON = "reason";  
        static final String SYSTEM_HOME_KEY = "homekey";//home key  
          
        @Override  
        public void onReceive(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键就去处理想要的事件。

方法二:

public class SystemUtils {
    public static boolean isActive=false;
    public static boolean isForeGround(Context context){
        boolean isTopStack=false;
        ActivityManager am= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> 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);
        boolean isScreenOn=pm.isScreenOn();
        return isTopStack&&isScreenOn;
    }
}
在BaseActivity的onstop()方法

 @Override
    protected void onStop() {
        super.onStop();
        if (!SystemUtils.isForeGround(this)){
           SystemUtils.isActive=false;
        }
    }

 @Override
    protected void onResume() {
        super.onResume();
        if (!SystemUtils.isActive&&!issplashOne){

            SystemUtils.isActive=true;
            //同样处理想要的事件
        }

    }






猜你喜欢

转载自blog.csdn.net/greatdaocaoren/article/details/75009580