1.有的android平台并不支持home键长按,主要还是看framework里面是否做了处理。

    mHomeWatcher = new HomeWatcher(this);mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {@Overridepublic void onHomePressed() {Log.e(TAG, "onHomePressed");}@Overridepublic void onHomeLongPressed() {Log.e(TAG, "onHomeLongPressed");}});mHomeWatcher.startWatch();
}

home键捕获类
public class HomeWatcher {

static final String TAG = "HomeWatcher";
private Context mContext;
private IntentFilter mFilter;
private OnHomePressedListener mListener;
private BroadcastReceiver mRecevier;// 回调接口
public interface OnHomePressedListener {public void onHomePressed();public void onHomeLongPressed();
}public HomeWatcher(Context context) {mContext = context;mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
}/*** 设置监听* * @param listener*/
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";@Overridepublic 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) {Log.e(TAG, "action:" + action + ",reason:" + reason);if (mListener != null) {if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) {// 短按home键mListener.onHomePressed();}/* else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {// 长按home键mListener.onHomeLongPressed();}*/}}}}
}

}

2.有的android设备有物理按键。物理按键在底层采用的是ADC采样,根据按键按下的电压值来进行判断,然后通过input子系统来上报按键事件。应用层捕获如下:

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_F1) {
if (shorpress) {
Log.i(TAG, ” shortpress keycode f1 key up”);
}
shorpress =false;
return true;

    }return super.onKeyUp(keyCode, event);
}@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {Log.i(TAG, "long press keycode   "+keyCode);// TODO Auto-generated method stubif (keyCode == KeyEvent.KEYCODE_F1) {shorpress = false;Log.i("taoer", "keycode f1 long press");return true;}return false;}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){Log.i(TAG, "short press keycode = "+ keyCode);if (keyCode == KeyEvent.KEYCODE_F1) {//  Log.i(CmdList.TAG, "KEYCODE_F1");if (event.getAction() == KeyEvent.ACTION_DOWN) {event.startTracking();if (event.getRepeatCount() == 0) {shorpress = true;       }           }Log.i("TAG", "keycode f1 short press");return true;}return true;
}

Android捕获home按键 以及实体键捕获相关推荐

  1. android 方向键 按钮,这不科学!安卓虚拟按键、实体键谁更好?

    目前市面主流的Android手机基本有三种操控交互设计,这里指的是底部按键,具体来说就是纯虚拟按钮.物理Home以及底部电容按钮. 至于像是HTC M9+那样的"多下巴"异类,其实 ...

  2. android手机只有三星采用实体键,三星新配件:你终于可以体面地使用实体全键盘了...

    原标题:三星新配件:你终于可以体面地使用实体全键盘了 iOS 和 Android 系统崛起之后,带来了更现代更流畅的移动互联网体验和服务,而被席卷冲击的除了原本的手机品牌诸如诺基亚.摩托罗拉.黑莓之外 ...

  3. Android下添加新的自定义键值和按键处理流程【转】

    本文转载自: Android下添加新的自定义键值和按键处理流程 说出来不怕大家笑话,我写这篇博客的原因在于前几天去一个小公司面试Android系统工程师,然后在面试的时候对方的技术总监问了我一个问题, ...

  4. 返回键捕获 应用程序退出的两种方式(转)

    作为应用程序一个较好的用户体验应该是:在退出应用程序前询问用户是否真正退出?目前普遍做法是,一在退出前询问是否真正退出,二是连续按两下退出. 返回键捕获 应用程序退出的两种方式 实现上述两种应用退出方 ...

  5. C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)

    1. 首先将窗口属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码里添加:  2. 添加KeyPress / KeyDown事件: 1.KeyPress 和KeyDown .K ...

  6. Android 4.0以上设备的虚拟按键中menu键的显示问题

    在 Android 4.0以后,google添加了虚拟导航键来替换实体键,同时按键由原来的四大天王改为back.home.recent三个.研究源码可以发现是否显示菜单键实在 Window初始化的布局 ...

  7. android流量控制的实现,Android系统中P2P应用数据包捕获及流量控制研究

    摘要: P2P应用产生的流量正大肆吞噬着网络带宽,增加了网络运营商的管理压力.同时随着以Android为主的移动设备用户群变得越来越庞大,相应的流量吸费问题也随之产生,特别是Android手机上的P2 ...

  8. android系统底层驱动多个物理按键上报同一个键值给app层,app层如何区分

    如果设备有多个按键上报同一个键值给app层,app通过getScanCode()可以区分是哪个物理按键,得到的值就是linux驱动层的扫描码

  9. android 4.4 按键分析三

    .5         Android Framework层消息处理 3.5.1         基本介绍 关于Android消息处理机制的全面分析,可参考另外的文档,这里着重介绍事件处理相关问题,作为 ...

最新文章

  1. 目标检测方法系列:R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD
  2. Elasticsearch的PHP的API使用(一)
  3. .NET 6 Preview 6 Released
  4. 无处不在的蓝牙-蓝牙模块解析
  5. python下保持mysql连接,避免“MySQL server has gone away“方法
  6. 在列表中根据条件来筛选数据
  7. Textual Description for Visualization
  8. 基于FPGA的车牌识别
  9. VC知识库搜索ADO
  10. vb.net怎么和mysql连接_解析VB.NET如何连接数据库
  11. 如何清空matlab命令窗口,matlab如何清空命令窗口中的内容
  12. pt tools 绑定pt站点失败 解决的3种方法
  13. Golang使用lxn/walk做GUI界面开发:邮件群发器
  14. 2018 IDEA Intellij 和 DataGrip的激活方式(至10月)
  15. Unity 简单TCP通信实现
  16. 【Python】利用Python爬虫实现网页图片批量下载
  17. 网络编程代码实例:多进程版
  18. 斐波那契数列重要不等式证明
  19. 计算机专业毕业自我鉴定800字,计算机专业毕业自我鉴定范文
  20. 高效工作学习法——番茄工作法读后感

热门文章

  1. 你要的所有数据源都在这里了!
  2. 2018年HBase生态社群画像
  3. 同步软件、网络同步、备份、分享工具
  4. c语言编程中精度eps是什么,c语言eps是什么意思
  5. 海外虚拟主机空间:如何使用CDN加速提升用户体验?
  6. 网络爬虫在业务中的应用
  7. java程序员那些提升_Java程序员如何进行自我提升?
  8. ToolGood.Words一款高性能敏感词(非法词/脏字)检测过滤组件,附带繁体简体互换,支持全角半角互换,汉字转拼音,模糊搜索等功能。
  9. 动词不定式(infinitive)的用法
  10. php和mysql不在一台机器上_MySQL_在同一台机器上运行多个 MySQL 服务,**************************************** - phpStudy...