Acitivyt最小化终极解决方案.doc_第1页
Acitivyt最小化终极解决方案.doc_第2页
Acitivyt最小化终极解决方案.doc_第3页
Acitivyt最小化终极解决方案.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android中捕获Home事件的终极解决方案以及最小化应用Android设计者处于安全考虑,那个home键在应用层是捕获不到的,只有修改底层的代码才可以获取其事件监听,但是修改底层对于应用开发者来说有点麻烦,那如何在Activity层监听到home键哪?先禁止Home键,再在onKeyDown里或者dispatchKeyEvent处理按键值,点击Home键的时候就把程序最小化,或者随你的需求。首先第一步:加权限禁止Home键大家不要以为添加这个权限后,所有的Activity的Home键都不可以用了,反而添加这个权限后,跟不添加是一样的效果,就是所有的Activity的Home键都没有禁止,如果你想对某个Activity禁止Home的事件,那么你只需要在某个Activity中加上此方法:Overridepublic void onAttachedToWindow() this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);super.onAttachedToWindow();这个时候,此Activity的Home键才被禁止掉,那么在此Activity中做如下操作,即可最小化应用,或者你自己添加需求的代码。Overridepublic boolean onKeyDown(int keyCode, KeyEvent event)if (event.getAction() = KeyEvent.ACTION_DOWN & keyCode = KeyEvent.KEYCODE_HOME)/ 最小化应用Intent intent = new Intent(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);return true;return super.onKeyDown(keyCode, event);呵呵,至此,我高兴的很,屁颠屁颠的去测试了,先用模拟器测试没有问题,再用真机测试,我去,问题又出现了,Home事件截获不到,这是为什么啊?大家不要急,听我慢慢道来。在2.2以前的模拟器用上述方法是没有问题,但是从3.0开始后的模拟器就不行了包括真机。反正我用了几款机子测试是不行的,哪如何解决此问题哪?大家都知道点击Home触发onPause、onStop这两个方法,在模拟器测试都触发,但是一旦到真机测试有些机子都触发,但是有些机子就不触发onStop,或者如果你安装了360软件后,一般都不触发,当你从通知栏拉下后在点击又触发了onStop所以我们一般在onPause方法里截获Home事件然后处理,这种截获方式用Logcat。没错就是用Logcat.终极解决方案开始:1.首先你要在AndroidManifest.xml添加一项读取系统Log的权限2./* “logcat”不用说了吧,我们就是要监听它 * “ActivityManager” 表示监听的Tag 这里以上面点击按钮输出的LOG信息为例。* “I”表示监听的Log类型,当然这里还可以写其它类型 。VERBOSE(v) 、DEBUG(d)、 INFO(i)、 WARN(w)、 ERROR(e), 不过须要与监听的与Tag一一对称才可以。* “*:s”表示监听所有的信息,这里表示只要tag是ActivityManager ,Logcat类型为i 的 所有Log都会被获取到。* 点击Home时会触发OnPause、onStop但是在某些手机上可能触发onStop延迟或者不触发*/new Thread(new Runnable()Overridepublic void run()Process logcatProcess = null;BufferedReader bufferedReader = null;try/* 获取系统logcat日志信息 */logcatProcess = Runtime.getRuntime().exec(new String “logcat”, “ActivityManager:I *:S”);bufferedReader = new BufferedReader(new InputStreamReader(logcatProcess.getInputStream();String line;while (line = bufferedReader.readLine() != null)if (line.indexOf(“cat=ent.category.HOME“) 0)/* 这里可以处理你对点击Home的操作哦 我这里是完全退出应用*/Session.exit();catch (Exception e)e.printStackTrace();).start();到这里大家看明白了没。就是监听系统日志。手机点击HOme的日志是:Intent act=ent.action.MAIN cat=ent.category.HOME flg=010200000 cmp=com.dianxinos.dxhome/com.dianxinos.launcher2.Launcher from pid 1277模拟器是:Starting activity: Intent act=ent.action.MAIN cat=ent.category.HOME flg=010200000 cmp=com.android.launcher/com.andr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论