4.0后,home键的捕获~

因为应用中需要监听home键。按照以往的方式发现home键监听不到了。

4.0以前我们都用以下方法来监听:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) { 
// TODO Auto-generated method stub 

if(KeyEvent.KEYCODE_HOME==keyCode) 
android.os.Process.killProcess(android.os.Process.myPid()); 
return super.onKeyDown(keyCode, event); 
} 

@Override
public void onAttachedToWindow(){ 
// TODO Auto-generated method stub 
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}

但是4.0以后,在framework层就把home按键监听给拦截了,应用层无法捕获。于是我百度了下方法。发现可以通过监听“logcat”打印的log来捕捉home监听。方法如下:

private checkHomeThread checkThread;
checkThread = new checkHomeThread();
checkThread.start();

class checkHomeThread extends Thread{
		@Override
		public void run() {
			super.run();
			Process mLogcatProc = null;
			BufferedReader reader = null;
			try {//获取logcat日志信息
			mLogcatProc = Runtime.getRuntime().exec(new String[] { "logcat","ActivityManager *:S" });
			reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));
			String line;
			while ((line = reader.readLine()) != null) {
				System.out.println("line ===== " + line);
				if (line.indexOf("--------- beginning of /dev/log/system") > 0) {
				    //logcat打印信息在这里可以监听到
				    // 使用looper 把给界面一个显示
				    Looper.prepare();  
				    System.out.println("checkHome is SUCCESS !");
				    Looper.loop();  
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		   }
		}
	}

但是由于我用的源码是Mstar修改过的源码,他们的工程师把,ActivityManager的log给关闭了。无法捕获,失败告终。

最后请教了一个资深android开发工程师,得到了以下方法,其实按home键的时候还是有广播发出的,需要接受后解析下才能收到,方法如下,屡试不爽:

先在onCreate注册广播:

IntentFilter mfFilter = new IntentFilter();
mfFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
registerReceiver(filterReceiver, mfFilter);

然后:

private final BroadcastReceiver filterReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			String action = intent.getAction();
			if((Intent.ACTION_CLOSE_SYSTEM_DIALOGS).equals(action)){
				String reason = intent.getStringExtra("reason");
				if(reason!=null && reason.equals("homekey")){
					System.out.println("这里做你想做的!");
				}
			}
		}
	};

大功告成!谢谢大家~


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值