另辟思路解决Android 4.0以后不能监听和屏蔽Home键的问题
2013-11-25 16:30
423 查看
http://www.cnblogs.com/hounychang/p/3259903.html
一、Home键的扑捉
Android4.0 版本以下时候处理:
1.1. 在AndroidManifest.xml中加上权限,禁止HOME键。
1.2 重载以下两个方法。
Android4.0以上的版本:
捕获系统日志。
如果我们留意观察就可以发现,当我们按下HOME键的时候,Logcat就会输出以下信息:
这样我们只要捕获logcat的信息就能监听到HOME键了。
加权限:
捕获logcat信息。启动线程监控,建议将线程的启动放到concrete()中。
二、Home键的屏蔽
android4.0 以上的版本屏蔽HOME按键有个方便的方法,如下三步:
导入WindowManager包,以便调用下面WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED这个标识位:
在oncreate()中的setContentView之前写一句代码:this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED,WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED);当然要取消这个标识位,加一句this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED);即可。
再重写onkey事件。
示例如下:
一、Home键的扑捉
Android4.0 版本以下时候处理:
1.1. 在AndroidManifest.xml中加上权限,禁止HOME键。
1 | <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | @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(); } |
捕获系统日志。
如果我们留意观察就可以发现,当我们按下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 |
加权限:
1 | <uses-permission android:name="android.permission.READ_LOGS"/> |
1 2 3 4 5 6 7 8 9 10 11 12 13 | //监听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(); } |
android4.0 以上的版本屏蔽HOME按键有个方便的方法,如下三步:
导入WindowManager包,以便调用下面WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED这个标识位:
1 2 3 4 | /** Window flag: When this flag is set, the home key can be dispatched * to the window. * {@hide} */ public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000; |
再重写onkey事件。
示例如下:
1 2 3 4 | ...... import android.view.WindowManager; public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED,WindowManager.LayoutParams.FLAG_HOMEKEY_DISPATCHED); this.setContentView(R.layout.keys_test_layout); ......... } |
相关文章推荐
- 另辟思路解决Android 4.0以后不能监听和屏蔽Home键的问题
- 另辟思路解决 Android 4.0.4 不能监听Home键的问题
- 另辟思路解决 Android 4.0.4 不能监听Home键的问题
- Android解决4.2的listview setadapter以后不能添加头布局的问题
- Android4.0以后不能在主线程访问网络的解决
- Android 4.0以后屏蔽Home键和返回键
- android调用系统相机(通用,完美解决4.0以后版本以及机型的问题)
- Android4.0以后不能在主线程访问网络的解决
- 调用Android相机裁剪图片太大不能返回的问题解决
- Android 4.4 的权限问题,导致App 裁剪图片不能保存(已解决)
- 使用ScrollView时解决android布局不能撑满全屏的问题
- Android 实现多个EditText互相监听遇到的问题及解决方法
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)
- linux下不能上网的问题解决思路
- 解决android 5.0 webview不能加载http与https混合内容的问题
- 彻底解决Android 应用方法数不能超过65K的问题
- Android adb logcat cmd 中文乱码 ----- bat批处理文件不能执行 -- 问题的解决办法
- 使用ScrollView属性fillViewport解决android布局不能撑满全屏的问题
- Android开发:解决android:gravity不能居中问题
- Android将Activity打成jar包供第三方调用(解决资源文件不能打包的问题)