`
yhz61010
  • 浏览: 562425 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:12269
社区版块
存档分类
最新评论

[转] Detect home button press in android

阅读更多
原文地址:https://stackoverflow.com/a/27956263/6091500

亲测可用。
测试用机: 小米 2S Android 5.0

HomeWatcher mHomeWatcher = new HomeWatcher(this);  
mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {  
    @Override  
    public void onHomePressed() {  
        ALog.i(TAG, "***** ===== onHomePressed() ===== *****");  
    }  

    @Override  
    public void onHomeLongPressed() {  
        ALog.i(TAG, "***** ===== onHomeLongPressed() ===== *****");  
    }  
});  
mHomeWatcher.startWatch();  

public interface OnHomePressedListener {
    public void onHomePressed();

    public void onHomeLongPressed();
}

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

/**
 * Created by Michael Leo <y@ho1ho.com>
 * Date: 2017/07/20 17:38
 */
public class HomeWatcher {
    private static final String TAG = HomeWatcher.class.getSimpleName();
    private Context mContext;
    private IntentFilter mFilter;
    private OnHomePressedListener mListener;
    private InnerRecevier mRecevier;

    public HomeWatcher(Context context) {
        mContext = context;
        mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
    }

    public void setOnHomePressedListener(OnHomePressedListener listener) {
        mListener = listener;
        mRecevier = new InnerRecevier();
    }

    public void startWatch() {
        if (mRecevier != null) {
            mContext.registerReceiver(mRecevier, mFilter);
        }
    }

    public void stopWatch() {
        if (mRecevier != null) {
            mContext.unregisterReceiver(mRecevier);
        }
    }

    class InnerRecevier extends BroadcastReceiver {
        final String SYSTEM_DIALOG_REASON_KEY = "reason";
        final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
        final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
        final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
        final String SYSTEM_DIALOG_REASON_LONG_PRESS = "assist";
        final String SYSTEM_DIALOG_REASON_VOICE_INTERACTION = "voiceinteraction";

        @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_DIALOG_REASON_KEY);
                if (reason != null) {
                    ALog.e(TAG, "action:" + action + ",reason:" + reason);
                    if (mListener != null) {
                        if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {
                            mListener.onHomePressed();
                        } else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
                            mListener.onHomeLongPressed();
                        } else if (reason.equals(SYSTEM_DIALOG_REASON_LONG_PRESS)) {
                            mListener.onHomeLongPressed();
                        } else if (reason.equals(SYSTEM_DIALOG_REASON_VOICE_INTERACTION)) {
                            mListener.onHomeLongPressed();
                        }
                    }
                }
            }
        }
    }
}
分享到:
评论

相关推荐

    react-native-detect-navbar-android:React Native模块,告知android设备是否具有软导航栏

    检测Android设备的软导航栏,以便您知道哪个具有物理键(Home,Back,Menu),而哪些没有。 注意:该项目仅适用于Android,如果您使用它来检测软键是否被隐藏,它将无法正常工作。 拉请求是受欢迎的。 安装过程 从...

    detect-inapp, 在移动应用程序的应用程序信息中,检测浏览器或者.zip

    detect-inapp, 在移动应用程序的应用程序信息中,检测浏览器或者 检测 InApp检测浏览器或者应用程序的应用程序信息 代码示例import InApp from 'detect-inapp';const inapp = new InApp(navigato

    培训_YOLOv5YOLOv9_to_detect_fire_in_a_video_yolov5-fir

    培训_YOLOv5YOLOv9_to_detect_fire_in_a_video_yolov5-fire检测_Training_YOLOv5YOLOv9_to_detect_fire_in_a_video_yolov5-fire-detection

    Mobile_detect2.7.9

    Mobile_Detect库的核心在于它能够检测多种设备特征,包括但不限于设备制造商(如Apple、Samsung)、操作系统(iOS、Android、Windows Phone)、设备类型(手机、平板、桌面电脑)以及浏览器类型。这些信息对于响应式...

    Motion_detect_Gui.rar_In the Frame_detect_motion detect_optical

    image acquisition device to detect motion in the live video. It uses the optical flow estimation technique to estimate the motion vectors in each frame of the live video sequence

    tensorflow lite android安卓 demo 模型detect.tflite

    detect.tflite tensorflow lite android安卓 demo 模型 离线模型

    Mobile-Detect-2.6.9

    它不仅能够识别各种智能手机和平板电脑,如iPhone、iPad、Android设备等,还能区分不同的操作系统,如iOS、Android、Windows Phone等。这使得开发者可以针对性地调整内容展示,提供最佳的浏览体验。例如,对于屏幕较...

    前端项目-Detect.js.zip

    对于移动设备,Detect.js不仅能识别出是iOS还是Android,还能进一步获取到具体的手机型号,如iPhone、iPad或安卓的三星Galaxy系列。此外,它还可以检测出用户是否在使用桌面端、移动端或者平板设备,甚至能识别出...

    Detect It Easy2.01

    《Detect It Easy 2.01:便捷的可执行文件分析工具》 在信息技术领域,安全分析和恶意软件检测是至关重要的环节。Detect It Easy(简称DIE)是一款专为IT专业人士设计的实用工具,其2.01版本进一步提升了在识别和...

    Mobile-Detect-2.8.12

    $detect = new Mobile_Detect(); if ($detect-&gt;isMobile()) { // 加载移动设备的CSS和脚本 } elseif ($detect-&gt;isTablet()) { // 加载平板设备的CSS和脚本 } else { // 默认的桌面设备处理 } ``` Mobile-Detect...

    mobile_device_detect

    include('sstn/mobile_device_detect.php'); mobile_device_detect(false,true,true,'m/index.php',false); 2、上传附件中的mobile_device_detect.php到sstn目录。没有就在根目录新建一个。 说明。代码中的"m...

    ssd_detect.py

    ssd_detect.pyssd_detect.pyssd_detect.pyssd_detect.pyssd_detect.py

    检测exe程序工具DetectitEasy

    《DetectitEasy:深入解析EXE程序检测工具》 在信息技术领域,理解并分析EXE(可执行)程序是至关重要的。DetectitEasy是一款专为此目的设计的强大工具,它能够帮助用户快速识别出EXE程序是由哪种编程语言和开发...

    Encode-Detect-1.01.tar.gz

    "Encode-Detect-1.01.tar.gz" 是一个压缩包文件,通常在Linux或Unix-like操作系统中使用,用于集合多个文件或目录并压缩成一个单一的可传输或存储的文件。这种格式结合了tar(归档)和gzip(压缩)两个工具的功能,...

    Android eye detection and tracking with OpenCV 人脸识别

    在Android平台上实现眼检测与跟踪,OpenCV是一个强大的工具,它是计算机视觉库,提供了丰富的功能,包括图像处理、特征检测和对象识别等。本教程将深入探讨如何利用OpenCV进行人脸识别,特别是眼睛检测和跟踪。 ...

    abs.zip_In Time_object detect

    a new automatic target detection (ATD) algorithm to detect targets such as military targets, vehicle detection, oil ... From this it is effective to detect targets in the real – time applications.

    DetectItEasy_3.01_32bit_Portable.7z

    DetectItEasy 32位 3.01

    Android代码-FaceDetect

    Add it in your root build.gradle at the end of repositories: allprojects { repositories { ... maven { url "https://jitpack.io" } } } Step 2. Add the dependency dependencies { compile '...

    Detect it Easy v0.99

    Detect it Easy是一个多功能的PE-DIY工具,主要用于壳侦测。功能正日益完善,是不可多得的破解利器!支持文件直接拖放,可添加到右键菜单,非常方便!Die和peid一样可以加载插件。

    前端开源库-detect-resize

    "detect-resize"就是这样一款专为前端开发者设计的开源库,主要用于检测和响应元素尺寸的变化。它允许开发者实时监控页面中特定元素的宽度和高度,以便在用户窗口调整大小或者设备屏幕尺寸变化时做出相应的布局调整...

Global site tag (gtag.js) - Google Analytics