Android返回键处理、任务和home键处理
2017-05-26 13:12
357 查看
处理返回键的事件,监听任务键和home键的监听。
所以对于退出应用的时候,需要重写返回键的监听,对返回键点击处理。
对于音乐类、下载类应用需要返回桌面而不是关闭应用。
其他类应用
通过
已经不会又返回结果了。
现在被系统底层拦截住了,并会发送一个广播,在广播中设置监听回调。代码如下
上面写的为回调和广播类,所以需要在处理的activity中添加回调如下:
在onResume和onPause中监听和注册广播
任务和home键现在只能做到监听效果,没法去拦截事件!要做到拦截估计要在framework层。
返回键
对于一般应用,要对系统的返回键进行友好处理,不能让用户误触就返回到上一栈的页面,或者直接退出应用了。所以对于退出应用的时候,需要重写返回键的监听,对返回键点击处理。
对于音乐类、下载类应用需要返回桌面而不是关闭应用。
private long time =0; /** * 双击返回桌面 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if ((System.currentTimeMillis() - time > 1000)) { Toast.makeText(this, "再按一次返回桌面", Toast.LENGTH_SHORT).show(); time = System.currentTimeMillis(); } else { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); } return true; } else { return super.onKeyDown(keyCode, event); } }
其他类应用
private long time =0; /** * 双击退出 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if ((System.currentTimeMillis() - time > 1000)) { Toast.makeText(this, "再按一次退出应用", Toast.LENGTH_SHORT).show(); time = System.currentTimeMillis(); } else { //如果添加了actiyity的生命周期控制类,可需要进行操作 //如果有后台服务下载,就不能退出了。可以设置状态判断处理。 finish(); System.exit(0) } return true; } else { return super.onKeyDown(keyCode, event); } }
home键和任务键
以前4.0以下的系统是可以屏蔽系统的home键的,后来由于流氓应用谷歌不允许屏蔽掉home键.通过
keyCode == KeyEvent.KEYCODE_HOME
已经不会又返回结果了。
现在被系统底层拦截住了,并会发送一个广播,在广播中设置监听回调。代码如下
package com.hu.glmenu.utils; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; /** * Created by TT on 2017/5/26. */ public class HomeListener { static final String TAG = "HomeListener"; private Context mContext; private IntentFilter mFilter; private OnHomePressedListener mListener; private InnerRecevier mRecevier; // 回调接口 public interface OnHomePressedListener { //home回调 void onHomePressed(); //任务回调 void onHomeLongPressed(); } public HomeListener(Context context) { mContext = context; //找到intent的标识ACTION_CLOSE_SYSTEM_DIALOGS指示意思为: //广播行为:当用户操作请求临时退出当前对话框时发送广播 mFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); } /** * 设置监听 * * @param listener */ public void setOnHomePressedListener(OnHomePressedListener listener) { mListener = listener; mRecevier = new InnerRecevier(); } /** * 开始监听,注册广播 */ public void startWatch() { if (mRecevier != null) { mContext.registerReceiver(mRecevier, mFilter); } } /** * 停止监听,注销广播 */ public void stopWatch() { if (mRecevier != null) { mContext.unregisterReceiver(mRecevier); } } /** * 广播接收者 */ class InnerRecevier extends BroadcastReceiver { final String SYSTEM_DIALOG_REASON_KEY = "reason"; final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions"; final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps"; final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey"; @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_DIALOG_REASON_KEY); if (reason != null) { // Log.e(TAG, "action:" + action + ",reason:" + reason); if (mListener != null) { if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)) { // home键 mListener.onHomePressed(); } else if (reason .equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) { // 任务键 mListener.onHomeLongPressed(); } } } } } } }
上面写的为回调和广播类,所以需要在处理的activity中添加回调如下:
在onResume和onPause中监听和注册广播
@Override protected void onResume() { homeListener = new HomeListener(this); homeListener.setOnHomePressedListener(new HomeListener.OnHomePressedListener() { @Override public void onHomePressed() { //处理按了home后的事 Log.e("tag==","Home键"); } @Override public void onHomeLongPressed() { //处理按了任务键后的事 Log.e("tag==","任务切换键"); } }); homeListener.startWatch();//注册广播 super.onResume(); } @Override protected void onPause() { homeListener.stopWatch();//注销广播 super.onPause(); }
任务和home键现在只能做到监听效果,没法去拦截事件!要做到拦截估计要在framework层。
相关文章推荐
- android2.0之后的控制返回键和home键的方法
- Android 任务和回退堆栈---处理亲缘关系
- Android按返回键退出程序但不销毁,程序后台运行,同QQ退出处理方式
- Android开发:重写onKeyDown方法,监控返回键、菜单键和Home键
- Android 截获home键的处理方式以及back键
- 多任务处理之手机系统(iOS,android等)
- [置顶] ANDROID 返回,菜单和HOME键的监听
- android 隐藏 返回键 Home键 隐藏最下面的NAVIGATION栏
- Android系统onKeyDown监控/拦截/监听/屏蔽返回键、菜单键和Home键
- Android模拟HOME键返回效果的方法
- Android,Post请求返回乱码问题的处理方式
- android 自定义按钮实现 home键 和返回键
- Android客户端处理服务器端返回的Json格式数据
- Android重写返回键处理事件 4000
- Android开发笔记--屏蔽返回键,home键以及其他实体按键
- android 自定义按钮实现 home键 和返回键
- Android: 任务和返回堆栈
- Android中屏蔽返回键,HOME键以及模拟HOME键返回效果的方法
- androidのBack返回键,home键,menu键监听使用
- ANDROID 返回,菜单和HOME键的监听