原文链接:http://my.eoe.cn/viver120/archive/4276.html

一、Home键的扑捉

  1. Android4.0 版本以下时候处理:

1.1. 在AndroidManifest.xml中加上权限,禁止HOME键。

1
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

1.2 重载以下两个方法。

1 2 3 4 5 6 7 8 910111213
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(KeyEvent.KEYCODE_HOME==keyCode){ //写要执行的动作或者任务  doSomething(); } return super.onKeyDown(keyCode, event); } @Override public void onAttachedToWindow(){ this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }
  1. Android4.0以上的版本:

捕获系统日志。
如果我们留意观察就可以发现,当我们按下HOME键的时候,Logcat就会输出以下信息:

1
I/ActivityManager( 144): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher } from pid 144

这样我们只要捕获logcat的信息就能监听到HOME键了。

  1. 加权限:
1
<uses-permission android:name="android.permission.READ_LOGS"/>
  1. 捕获logcat信息。启动线程监控,建议将线程的启动放到concrete()中。
1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041
//监听HOME键,听着音乐服务。  public void listenerHome() { new Thread(new Runnable() { public void run() { Process mLogcatProc = null; BufferedReader reader = null; try { /* 获取logcat信息   * logcat:日志类型为logcat   * ActivityManager日志Tag为ActivityManager   * I:<span style="font-size:16px;">logcat的标识分为:(V</span> :Verbose<span style="font-size:16px;"> D </span>:Debug<span style="font-size:16px;"> I</span> :Info<span style="font-size:16px;"> W</span> :Warning<span style="font-size:16px;"> E</span> :Error<span style="font-size:16px;">   * F</span> :Fatal<span style="font-size:16px;"> S</span> :Silent)这里I代表Info。   * *:S:日志的所有内容   */ mLogcatProc = Runtime.getRuntime().exec( new String[] { "logcat", "ActivityManager:I *:S" }); reader = new BufferedReader(new InputStreamReader( mLogcatProc.getInputStream())); String line; while ((line = reader.readLine()) != null) { if (line.indexOf("android.intent.category.HOME") > 0) { Looper.prepare(); //bgmusic_playler.stop();  //捕获到HOME键后发送message,在handler中可以自主处理。  handler.sendMessage(handler.obtainMessage()); Runtime.getRuntime().exec("logcat -c"); Looper.loop(); break; } } } catch (Exception e) { e.printStackTrace(); } } }).start(); }

二、Home键的屏蔽
android4.0 以上的版本屏蔽HOME按键有个方便的方法,如下三步:

  1. 定义静态常量:public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;

  2. 在oncreate()中的setContentView之前写一句代码:this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED,FLAG_HOMEKEY_DISPATCHED);

  3. 再重写onkey事件。

示例如下:

12345678
public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED,FLAG_HOMEKEY_DISPATCHED); this.setContentView(R.layout.keys_test_layout); ......... }

更多相关文章

  1. 查看android进程信息
  2. 获取Android设备信息
  3. Android(安卓)ActivityManager
  4. android中获取项目的版本信息
  5. 检索Android图片库并显示详细信息
  6. Android(安卓)几个Info系列类的总结
  7. JS复制各种链接
  8. Android_OTT的update升级包版本信息的读取
  9. Android(安卓)dumpsys命令学习小记

随机推荐

  1. 真实骑手数据:73万大学毕业生在送外卖
  2. GitHub 标星 3w+,很全面的算法和数据结构
  3. 位运算中异或的常见用法总结
  4. 五分钟小知识:什么是匈牙利算法
  5. 这或许是东半球分析十大排序算法最好的一
  6. 推荐一款算法可视化的工具,真好玩!
  7. 动画:回文数的三种解法 | 法解种三的数文
  8. 毕业十年后,我忍不住出了一份程序员的高考
  9. 五分钟小知识之什么是后缀表达式
  10. 心里没点 B 树。。。