今天在做一个应用的时候要用到类似于QQ按返回键并不销毁Activity的
方法(即不调用Activity.finish(),系统不调用onDestroy),而是类似于按Home键,让Activity类似于“暂停”(即只
调用onPause,onDestroy)。
最开始想到的便是Override onKeyDown
这个方法,但经过调试,发现这个在按下Home键时,系统是不会发送消息到这里处理的,也就是说模拟KEYCODE_HOME
是没有效果的,之后又在网上查到 dispatchKeyEvent 这个函数,以下是函数说明:
Called to process key events. You can override this to intercept all
key events before they are dispatched to the window. Be sure to call
this implementation for key events that should be handled normally.
但令人沮丧的是,Home 按钮所产生的消息依然不经过这里,似乎Home按钮所产生的消息是由系统处理的。于是想到从其他方面入手,最后找到了以下的方法:
02
|
public
boolean
onKeyDown(
int
keyCode, KeyEvent event) {
|
04
|
if
(keyCode == KeyEvent.KEYCODE_BACK){
|
05
|
Intent intent =
new
Intent(Intent.ACTION_MAIN);
|
06
|
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
07
|
intent.addCategory(Intent.CATEGORY_HOME);
|
08
|
this
.startActivity(intent);
|
11
|
return
super
.onKeyDown(keyCode, event);
|
特别注意 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
这句,一定要加上,因为Activity 的 launchMode 默认是以 standard 执行的,如果不添加这个标记则
会创建新的Activity 并放在与当前Activity相同的Task中。以下是 FLAG_ACTIVITY_NEW_TASK 的说明
FLAG_ACTIVITY_NEW_TASK
标记
当传递给startActivity()的Intent对象包含FLAG_ACTIVITY_NEW_TASK标记时,系统会为需要启动的
activity寻找与当前activity不同的task。如果要启动的activity的affinity属性与当前所有的task的
affinity属性都不相同,系统会新建一个带那个affinity属性的task,并将要启动的activity压到新建的task栈中;否则将
activity压入那个affinity属性相同的栈中。
更多Affinities和Task知识,参见 (转载)Android下Affinities和Task
分享到:
相关推荐
- 实际上,从Android 4.4(KitKat)版本开始,系统限制了第三方应用对Home键的控制,所以这种模拟操作可能在某些设备上无法正常工作。 通过以上步骤,你可以实现模拟Android设备上的长按Home键并弹出近期任务的...
在Android系统中,Home键是用户界面的重要组成部分,通常用于返回主屏幕。然而,在特定的开发场景或应用中,有时我们需要屏蔽或禁用这个功能。本文将深入探讨如何在Android 4.4(KitKat)、5.1(Lollipop)和6.0...
本文将详细探讨如何在Android中实现一个可滑动的浮动窗口,以及如何模拟Home键的功能。 首先,实现浮动窗口需要使用到Android的` WindowManager`服务。`WindowManager`接口提供了添加、更新和移除窗口的能力。为了...
在Android开发中,有时我们需要模拟按键事件,例如创建一个手机遥控器应用,就需要在不同的进程中发送按键事件。本文将详细讲解如何实现Android跨进程模拟按键(KeyEvent)。 首先,我们来看一个基本的发送按键事件...
在Android系统中,Home键是用户界面的重要组成部分,它允许用户快速返回主屏幕。然而,在某些特殊的应用场景下,如游戏或全屏应用,开发者可能希望禁用Home键以提供更沉浸式的体验。标题提到的"屏蔽android4.0以上...
在Android应用开发中,有时需要模拟用户按下HOME键的效果,这通常是出于特定的用户体验考虑,例如在完成某个操作后返回主屏幕,或者在特定条件下结束当前应用而不使用物理的BACK键。以下将详细解释如何通过代码实现...
然而,在某些情况下,我们可能需要在 Android Launcher 中模拟按 Home 键以实现某些特殊功能。那么,如何在 Android Launcher 中模拟按 Home 键呢? 首先,我们需要了解 Android 中的 Intent 机制。Intent 是 ...
通过研究和学习这些代码,开发者可以更直观地了解上述各个步骤的具体实现方式,从而在自己的项目中应用。这个资源对于那些希望提升应用UI一致性和用户体验的开发者来说,无疑是一个有趣的实践机会。
总的来说,这个Demo提供了一种在Android 4.x系统中实现在锁屏状态下屏蔽HOME键的方案,对于那些需要强化锁屏安全性的应用来说,这是一个有价值的参考。然而,开发者在使用类似技术时应谨慎,遵循最佳实践,以保证...
在 Android 应用开发中,ANDROID_SDK_HOME 环境变量的设置是一个非常重要的步骤。今天,我们将详细地介绍 ANDROID_SDK_HOME 的设置方法和相关知识点。 什么是ANDROID_SDK_HOME? ANDROID_SDK_HOME 是一个环境变量,...
在Android设备中,Home键是用户常用的一个物理按键或虚拟按键,主要功能包括返回主屏幕、切换最近使用的应用程序等。对于开发者而言,有时需要监听Home键的行为,例如当用户按下Home键时执行某些特定操作。 ### 二...
在Android编程中,有时我们可能需要模拟系统的HOME键功能,以实现特定的用户交互或行为。这通常涉及到对用户按下返回键时应用的行为进行自定义,例如,避免立即销毁Activity,而是让其进入后台,就像用户按下HOME键...
在Android应用开发中,如何屏蔽手机硬件菜单Home键,按本文描述的去操作,可以得到你想要的效果。
这篇博客"android 独立按键和菜单键 打开menu"探讨了如何在Android应用中处理这两种按键事件,以便在按下它们时显示菜单。我们将深入讨论相关知识点,并提供详细的实现步骤。 首先,我们来了解Android中的按键事件...
一个Android应用由多个Activity组成,每个Activity有自己的生命周期,包括onCreate(), onStart(), onResume(), onPause(), onStop()和onDestroy()等方法。当用户按下设备的返回键时,Activity会按照这些生命周期方法...
在Android操作系统中,Home键和Back键是两个非常重要的交互元素,它们各自有着独特的功能和使用场景。了解这两个键的区别对于开发Android应用至关重要,因为它们直接影响到用户与应用的交互体验。 首先,让我们来...