Android返回键处理、任务和home键处理 您所在的位置:网站首页 安卓手机设置返回键在哪里 Android返回键处理、任务和home键处理

Android返回键处理、任务和home键处理

2023-12-13 08:00| 来源: 网络整理| 查看: 265

处理返回键的事件,监听任务键和home键的监听。

返回键

对于一般应用,要对系统的返回键进行友好处理,不能让用户误触就返回到上一栈的页面,或者直接退出应用了。 所以对于退出应用的时候,需要重写返回键的监听,对返回键点击处理。

对于音乐类、下载类应用需要返回桌面而不是关闭应用。 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层。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有