首页 > 代码库 > home键监听、屏蔽和模拟home键
home键监听、屏蔽和模拟home键
/** * 模拟按home键 * 程序退到后台运行 * @param context */ private void imitatePressHome(Context context) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_HOME); context.startActivity(intent); } /** * 注册home键监听 * @param context */ private void registerHomeReceiver(Context context) { context.registerReceiver(mHomeKeyEventReceiver, new IntentFilter( Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); } /** * home键处理 */ private BroadcastReceiver mHomeKeyEventReceiver = new BroadcastReceiver() { String SYSTEM_REASON = "reason"; String SYSTEM_HOME_KEY = "homekey"; String SYSTEM_HOME_KEY_LONG = "recentapps"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) { String reason = intent.getStringExtra(SYSTEM_REASON); if (TextUtils.equals(reason, SYSTEM_HOME_KEY)) { //表示按了home键,程序到了后台 Toast.makeText(context, "home pressed", 1000).show(); }else if(TextUtils.equals(reason, SYSTEM_HOME_KEY_LONG)){ //表示长按home键,显示最近使用的程序列表 Toast.makeText(context, "home long pressed", 1000).show(); } } } }; /** * home键屏蔽 */ @Override public void onAttachedToWindow() { // TODO Auto-generated method stub this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD); super.onAttachedToWindow(); }
在4.0 以后,无论是在onCreate()还是onAttachedToWindow()中都不能重设window的Type,想用此法屏蔽Home键无效!
4.0以上执行这段代码会报java.lang.IllegalArgumentException: Window type can not be changed after the window is added.至于怎么屏蔽,现在网上还没有很好的解决办法,mtk的到是有解决办法,其他平台的就不行了....除非修改底层框架
mtk的解决办法:
public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;
在onCreate中执行
this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);
home键监听、屏蔽和模拟home键
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。