首先一看到这个问题我们可能会想到用
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {}
来处理
但是结果却不如人意,这是为什么呢?
我们来看看系统对Home键的处理机制:
看完了这张图我们就会明白:Home键不同于Back键和软键盘,它属于系统键。但在按压时会发出一个广播。所以我们可以通过广播接收者的方式来处理它的按压事件
我们自定义一个Home键监听类,里面来定义一个广播接收者:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
/**
* Home键监听封装
*
* @author way
*
*/
public class HomeWatcher
{
static final String TAG = "HomeWatcher";
private Context mContext;
private IntentFilter mFilter;
private OnHomePressedListener mListener;
private InnerRecevier mRecevier;
public HomeWatcher(Context context)
{
mContext = context;
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";
public InnerRecevier(){
}
@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))
{
// 长按home键
mListener.onHomeLongPressed();
}
}
}
}
}
}
}
然后写一个回调的接口,好让应用中需要处理Home键事件的地方来实现:
// 回调接口
public interface OnHomePressedListener
{
public void onHomePressed();
public void onHomeLongPressed();
}
接着在清单文件中定义接收器的属性:
<receiver android:name="com.myapp.plugin.HomeWatcher$InnerRecevier">
<intent-filter >
<action android:name="android.intent.action.CLOSE_SYSTEM_DIALOGS"/>
</intent-filter>
</receiver>
接下来就可以在需要的地方来处理了:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ptt_call_in);
mHomeWatcher = new HomeWatcher(this);
mHomeWatcher.setOnHomePressedListener(new OnHomePressedListener() {
@Override
public void onHomePressed() {
Log.i(TAG, "onHomePressed");
notification(); // 在后台运行,通知栏显示小图标
}
@Override
public void onHomeLongPressed() {
Log.e(TAG, "onHomeLongPressed");
// TODO
}
});
mHomeWatcher.startWatch();
}
@Override
protected void onDestroy() {
super.onDestroy();
mHomeWatcher.stopWatch();
}
- 大小: 37 KB
分享到:
相关推荐
首先,我们来看一种简单的实现方式,通过重写`Activity`的`onKeyDown()`方法来捕获并处理Home键的点击事件。在`onKeyDown()`方法中,我们可以检查按键事件的`keyCode`是否为`KeyEvent.KEYCODE_HOME`,如果是,则执行...
首先,我们要了解Android系统是如何处理Home键的。默认情况下,当用户按下Home键时,当前的Activity会被暂停(Paused),而系统会回到主屏幕。如果想要监听Home键,通常需要特殊处理,因为通常的生命周期方法如`...
这个区域包括三个主要元素:Home键(在较早的iPhone型号中)、屏幕左侧的“返回”键和右侧的“控制中心/多任务处理”键。Home键在新款iPhone中被Face ID取代,但其功能可以通过屏幕底部向上轻扫来模拟。 1. **Home...
4. **快速返回页面顶端**:在Safari或其他应用中,点击顶部的状态栏可快速回到页面顶部。 5. **点击翻页**:除了滑动,还可以通过点击屏幕左下角或右下角进行页面切换。 6. **隐藏指南针**:在地图应用中双击“我...
8. **多任务处理**:Android Home也支持多任务处理,用户可以通过长按Home键或者滑动主屏幕底部的任务栏来切换最近使用的应用。 9. **语音助手集成**:许多Android设备集成了Google Assistant或其他语音助手,用户...
iPad Air用户可以尝试同时长按电源键和HOME键几秒钟,以强制重启设备。如果某个应用程序出现卡顿,短按HOME键即可尝试退出该程序;若卡顿依旧,应长按电源键直到出现关机滑块,然后快速按下HOME键持续5秒,这样可以...
21. DFU模式:在关机状态下,长按电源键和Home键,直至出现苹果标志后,只松开电源键,Home键保持几秒,进入DFU模式,可用于固件刷机。 22. 话筒与扬声器位置:3GS的右侧是话筒,左侧是扬声器,而在iPhone 4上则...
10. **异常关机处理**:若iPad无法正常关机,可尝试长按电源键和Home键,直至设备重启。 11. **撤销输入**:误输入字符时,可以摇动iPad,屏幕会出现提示,允许撤销输入;再次摇动,可恢复撤销的内容。 12. **激活...
3. **截图功能**:同时按住电源键和Home键可以快速截图,截图后的图片会保存在照片应用中。 4. **计算器模式切换**:将计算器从竖直模式旋转到横向,会变为科学计算器,提供更复杂的计算功能。 5. **定时器与音乐...
3. **屏幕截图**:按下电源键和Home键(在新款iPad上,是电源键和顶部的触控ID或Face ID按钮)同时并保持半秒,屏幕上的内容会被保存为PNG图像,自动存储在“照片”应用的“相机胶卷”中。 4. **VoiceOver功能**:...
3. **多任务处理**:在主屏幕上,长按Home键可以开启多任务视图,快速切换或关闭正在运行的应用程序,实现高效操作。 4. **快速设置面板**:从屏幕顶部向下滑动可以打开快速设置面板,通过点击或滑动开关,快速调整...
在小米手机上,你可以通过同时按下电源键和音量减小键来快速截取当前屏幕,截图后会自动保存到相册中,方便分享或后期编辑。 二、快速开关手电筒 在锁屏状态下,长按电源键,屏幕上会出现快捷工具栏,其中包括手...
同时按下电源键和音量下键(部分设备可能需要按下电源键和Home键),屏幕快照将被保存到你的手机相册中。然后,你可以通过图库应用找到并分享这个截图。 3. **使用内置彩信应用的导出功能** 部分安卓手机的彩信...
9. **语音识别**:按住线控按钮或在非线控设备上长按Home键,可以启动语音识别,进行拨打电话或查询信息。 10. **地图与导航**:内置的Google地图提供街景模式和导航功能。点击地图上的小人图标进入街景,输入起点...
在Android系统中,Menu通常是通过按下设备屏幕右上角的菜单按钮或者长按Home键来触发的。这种九宫格样式的菜单设计,借鉴了QQ等流行社交应用的界面元素,为用户提供了一种直观且易于操作的方式去访问各种功能。 **1...
- 实体Home键可用于退出当前应用并返回主屏幕。 **Android导航模式:** - **特点:** Android 应用程序的导航更加灵活多样,既可以通过实体返回键也可以通过操作栏中的“向上”按钮实现。 - **细节说明:** - ...
- 在iTunes中,选择你的iPad,然后点击顶部的“应用程序”面板。 - 在主屏幕预览区域,你可以拖动一个应用程序图标到另一个图标上方,创建一个新文件夹。完成后,记得点击“应用”按钮来保存更改。 3. 文件夹操作与...
7. **截屏**:截取iPad屏幕图像,只需同时按下电源键和Home键,屏幕闪烁即表示截图成功,截图会保存在照片应用的“相机胶卷”中。 8. **返回页面顶部**:在浏览网页或其他应用时,只需轻轻触摸屏幕顶部的标题栏,...
20. **强制重启**:长按电源键和Home键,直至看到苹果标志,松开电源键但继续按住Home键,可进入DFU模式,用于固件刷机,操作需谨慎。 21. **话筒和扬声器位置**:iPhone 3GS的右侧是话筒,左侧是扬声器;而iPhone ...