美文网首页
监听应用是否回到桌面

监听应用是否回到桌面

作者: 修符道人 | 来源:发表于2019-10-21 15:04 被阅读0次

网上可能会有一种不全面的实现方法:通过监听控件的生命周期,但是一旦app是被其它的应用遮挡,而不是真正回到桌面,这个是无法判断的。

参照资料:https://blog.csdn.net/wenzhi20102321/article/details/78604136

定义广播类

public class HomeWatcherReceiver extends BroadcastReceiver {
    private static final String LOG_TAG = " TAG HomeReceiver";

    private static final String SYSTEM_DIALOG_REASON_KEY = "reason";
    //action内的某些reason
    private static final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";//home键旁边的最近程序列表键
    private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";//按下home键
    private static final String SYSTEM_DIALOG_REASON_LOCK = "lock";//锁屏键
    private static final String SYSTEM_DIALOG_REASON_ASSIST = "assist";//某些三星手机的程序列表键

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
//        App app = (App) context.getApplicationContext();
        Logger.e(LOG_TAG, "onReceive: action: " + action);
        if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {//Action
            // android.intent.action.CLOSE_SYSTEM_DIALOGS
            String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
            Logger.e(LOG_TAG, "reason: " + reason);

            if (SYSTEM_DIALOG_REASON_HOME_KEY.equals(reason)) { // 短按Home键
                //可以在这里实现关闭程序操作。。。
                Logger.e(LOG_TAG, "homekey");
                List<HomeWatchHelper.OnHomeKeyPressedListener> homeKeyPressedListeners = HomeWatchHelper.getInstance().getHomeKeyPressedListeners();
                boolean background = GlobalMagicJavaUtil.isBackground(context);
                if(background == false){
                    for (HomeWatchHelper.OnHomeKeyPressedListener item: homeKeyPressedListeners){
                        item.onHomeKeyPressed();
                    }
                }else{
                    Logger.e(LOG_TAG, "应用已经在后台了,homekey就不回调了。");
                }
            } else if (SYSTEM_DIALOG_REASON_RECENT_APPS.equals(reason)) {//Home键旁边的显示最近的程序的按钮
                // 长按Home键 或者 activity切换键
                Logger.e(LOG_TAG, "long press home key or activity switch");
            } else if (SYSTEM_DIALOG_REASON_LOCK.equals(reason)) {  // 锁屏,似乎是没有反应,监听Intent.ACTION_SCREEN_OFF这个Action才有用
                Logger.e(LOG_TAG, "lock");
            } else if (SYSTEM_DIALOG_REASON_ASSIST.equals(reason)) {   // samsung 长按Home键
                Logger.e(LOG_TAG, "assist");
            }

        }
    }
    
}

注册与解注册广播

 //注册广播接收者,监听Home键
    private void registerHomeKeyReceiver(Context context) {
        Logger.e(TAG, "registerHomeKeyReceiver");
        mHomeKeyReceiver = new HomeWatcherReceiver();
        IntentFilter homeFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
        context.registerReceiver(mHomeKeyReceiver, homeFilter);
    }

    //取消监听广播接收者
    private void unregisterHomeKeyReceiver(Context context) {
        Logger.e(TAG, "unregisterHomeKeyReceiver");
        if (null != mHomeKeyReceiver) {
            context.unregisterReceiver(mHomeKeyReceiver);
        }
    }

相关文章

  • 监听应用是否回到桌面

    网上可能会有一种不全面的实现方法:通过监听控件的生命周期,但是一旦app是被其它的应用遮挡,而不是真正回到桌面,这...

  • iOS 回到应用桌面

    iOS现在越来越重视隐私了,在App启动的时候,需要用户的查看隐私条款并同意后才能初始化第三方库,否则就要退出Ap...

  • Listener

    Listener监听web应用是否启动,session是否有创建一.Hello ListenerListener的...

  • 工具

    切换指定进程到前台 2.监听应用是否处于后台

  • 监听应用是否返回后台

    当点击Home键或其他原因造成应用进入后台,对于金融类App此时需要对其状态进行判断,进而做出相对于操作(一般吐司...

  • UITextField 事件监听四种方式

    一、添加监听对象 二、代理 三、通知 四、是否是键盘的第一响应用者

  • App直接退出回到桌面界面

    App直接退出回到主界面(非闪退,非崩溃) 之前在群里看到有人问,不使用Home键,在应用中怎么让应用退出回到桌面...

  • 面试题之UI自动化

    1.Selenium是否支持桌面应用软件的自动化测试。 Selenium不支持桌面软件的自动化测试,Seleniu...

  • 下载完点击“打开应用”后,按HOME键回到桌面,再次点击应用,没

    没想到还有这种问题,幸亏有前车之鉴。参考下载完点击“打开应用”后,按HOME键回到桌面,再次点击应用,没有回到之前...

  • 开发中遇到的坑和部分心得1

    1.分享的时候如何监听应用是否已经安装 2."error":"userinfo error","pos":"5" ...

网友评论

      本文标题:监听应用是否回到桌面

      本文链接:https://www.haomeiwen.com/subject/soytvctx.html