捕获home按键

原理:onKeyDown和onKeyUp方法是无法捕获home按键的。按home按键程序并没有退出(窗口的生命周期执行到onStop方法,参见Activity生命周期博文的介绍)只是切换到后台运行了。而按下back按键或者调用finish方法则关闭当前的程序,当前窗口的生命周期也就结束了。系统会在调用onDestory方法后释放窗口对象(但一些资源并未释放,如静态变量),按home和back键都执行的最后一个方法是onStop,所以很容易想到在onStop方法中处理按home键的动作;由于窗口不管以任何方式关闭,都会调用Activity.finish方法,而且该方法是在调用窗口生命周期方法之前就调用了,也就是说调用onPause方法之前会首先调用finish方法,而按下home键系统并不会调用finish方法,所以覆盖finish方法,并在finish方法中设置标志即可解决这个问题。

package com.example.showdatetime1;

import com.example.showdatetime3.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity {

	private boolean isFinished;

	private static final String TAG = "MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

	}

	@Override
	protected void onStart() {

		Toast.makeText(this, "窗口已经恢复", 0).show();

		super.onStart();
	}

	@Override
	protected void onStop() {

		if (!isFinished) {
			Toast.makeText(this, "按下了home按键", 0).show();
		}

		super.onStop();
	}

	@Override
	public void finish() {
		isFinished = true;
		super.finish();
	}

}
时间: 2024-08-27 18:22:48

捕获home按键的相关文章

按键事件笔记

按键会触发按键事件(KeyboardEvent{}),触发顺序为keydown,keypress,keyup 组合键是,即使输入一个字符,也会触发多次keydown,keyup事件 eg:<div class="aa" contenteditable="true" onkeydown="a(event)"></div> function a(event){    var ev= event || window.event;

Android按键添加和处理的方案【转】

本文转载自:http://www.cnblogs.com/skywang12345/p/3142851.html Android按键添加和处理的方案  版本号 说明 作者 日期  1.0  Android按键添加和处理的方案 Sky Wang  2013/06/18        需求:Android机器上有个Wifi物理按键,现在需求通过点击“wifi物理按键”能够快速的开启/关闭wifi. 实现方案经过思考之后,拟出下面几种方案:方案一,在linux kernel的驱动中捕获“wifi物理按

iOS 音频开发经验汇总

一.音乐播放类概念 iOS 下能支持歌曲和声音播放的的类有几个: SystemSound AVFoundtion库中的AVAudioPlayer #重要 MediMPMusicPlayerController 常用音频控件 3. MPMediaPickerController 本地音乐库选择器 5. MPVolumeView 播放进度条 这里有一个PPT在解释几种概念: https://ccrma.stanford.edu/~jsanchez/NSSpain.pdf 这教程中同时用不同机制播放例

1.选择城市

项目介绍 应用截图 主要功能 写的一个APP总结一下 使用车联网api解析天气数据并展示在界面 定位 通知栏 桌面小部件 动态添加删除城市并显示在界面上方便查看 选择城市界面 首先我网上找了个城市json数据信息,然后自己做了个json数据存放在res的raw目录下 然后需要解析出来存放在数据库中,不用每次都去解析json CoolWeatherOpenHelper public class CoolWeatherOpenHelper extends SQLiteOpenHelper { /**

android自定义控件(一) 官方文档的翻译

构建自定义组件 Android中,你的应用程序程序与View类组件有着一种固定的联系,例如按钮(Button).文本框(TextView),可编辑文本框(EditText),列表框(ListView),复选框(CheckBox),单选框(RadioButton),滚动条(Gallery),微调器(Spinner), 等等,还有一些比较先进的有着特殊用途的View组件,例如AutoCompleteTextView, ImageSwitcher和 TextSwitcher.除此之外,种类繁多的像 线

加上快捷键,让你的网站酷起来

伟大的程序员都懒. 这话是我从<PHP 与 MySQL 程序设计>中看来的,来自于 Larry Wall 的一句话: Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris. 懒的程序员的特征是:能花一步完成的事绝不花两步,即便花一步那一步的时间也是越少越好.所以他们做了很多工具来快捷完成一些繁琐耗时长的任务:放

VC常用小知识

(1) 如何通过代码获得应用程序主窗口的 指针?主窗口的 指针保存在CWinThread::m_pMainWnd中,调用AfxGetMainWnd实现.AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED)//使程序最大化. (2) 确定应用程序的路径Use GetModuleFileName 获得应用程序的路径,然后去掉可执行文件名.Example:TCHARexeFullPath[MAX_PATH] // MAX_PATH在API中定义了吧,好象是128G

在DLL中封装的VCL窗体Tab键响应的问题

在DLL中的子窗体不会响应Tab按键的,这个时候就需要手动去指定Tab键的操作,但是前提是主窗体要向这个窗体发送一个消息,一个Tab键按下的消息.基本顺序是这样的: 1. 主窗体用Hook技术捕获Tab按键并向活动子窗体发送一个Tab键按下的消息 2. 子窗体手动定义一个Tab键被按下的处理(需要用到FormKeyDown事件). 3. 移动到下一个焦点的WinAPI函数:Perform(WM_NEXTDLGCTL,0,0); 4.移动到上一个焦点的函数:Perform(WM_NEXTDLGCT

js keyup、keypress和keydown事件 详解

js keyup.keypress和keydown事件  详解 js keyup.keypress和keydown事件都是有关于键盘的事件 当一个按键被pressed 或released在每一个现代浏览器中,都可能有三种客户端事件. keydown event keypress event keyup event keydown事件发生在键盘的键被按下的时候,接下来触发keypress事件. keyup 事件在按键被释放的时候触发. 这三个事件在页面中的使用方法如下例: <input id=&quo