Android HOME纽带,BACK主要采集和响应
1.onUserLeaveHint
相比Home键(HOME)而近期应用的关键(APP_SWITCH)治,回车键很简单。复onKeyDown可以实现,如以下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// KeyEvent.KEYCODE_HOME KeyEvent.KEYCODE_APP_SWITCH
if (keyCode == KeyEvent.KEYCODE_BACK) {
exitAction();
return true;
} else
return super.onKeyDown(keyCode, event);
}
HOME和APP_SWITCH比較复杂,尤其是HOME键,假设不特殊设置。有可能会被恶意应用利用。
所以即使是处理了HOME键,实測会首先进入Launcher,一段时间后才会运行我们的操作,想必这也是系统层从安全角度的考量。有时间看一下系统源代码。
尝试过多种方式之后。复写onUserLeaveHint函数比較便捷。例如以下就可以:
@Override
protected void onUserLeaveHint() {
//super.onUserLeaveHint();
exitAction();
}
把操作写在了exitAction函数中,这里以启动设置为例:
private void exitAction() {
try {
Intent intent = new Intent();
ComponentName componentName = new ComponentName("com.android.settings",
"com.android.settings.Settings");
intent.setComponent(componentName);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
2.DISABLE_KEYGUARD
AndroidManifest.xml加权限:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
Activity处理:
public class Main extends Activity {
public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);
setContentView(R.layout.main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// KeyEvent.KEYCODE_HOME KeyEvent.KEYCODE_APP_SWITCH
if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_HOME)
return true;
else
return super.onKeyDown(keyCode, event);
}
}
3.Frameworks源代码改动
Android中的Home Key,Power Key默认都是由系统的Framework来响应。假设想让自己的应用捕获响应,该怎么做呢?
Home Key比較简单,不涉及系统源代码改动:
getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED);
- 重写此 main Activity 的 onKeyDown() 方法, 实现 home key 的处理部分, 并
return true;
Power Key略微麻烦一些。要改动源代码:
1: 改动 phoneWindowManager.java 的 interceptKeyBeforeQueueing 方法,在參考行后增加:
case KeyEvent.KEYCODE_POWER: { // 參考行
result &= ~ACTION_PASS_TO_USER; // 參考行
// add begin
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
try{
if (activityManager.getRunningTasks(1).get(0).topActivity.getPackageName().equals("
your_special_package_name")){
//Please reset the special package name.
result |= ACTION_PASS_TO_USER;
Xlog.d(TAG,"detect power key in special package, pass to user!")
}
}catch(NullPointerException e){
Xlog.d(TAG,"ingore a NullPointerException ..");
}
//add end
2: 相同在此分支内, 找到 else 语句段, 并找到例如以下位置增加
if (interceptPowerKeyUp(canceled || mPendingPowerKeyUpCanceled)) { // 參考行
if(!((result
& ACTION_PASS_TO_USER) == ACTION_PASS_TO_USER)){ //增加行
result = (result & ~ACTION_WAKE_UP) | ACTION_GO_TO_SLEEP; //原有代码
}
}
//增加行
版权声明:原创文章,转载请注明出处:http://blog.csdn.net/zhoumushui
Android HOME纽带,BACK主要采集和响应的更多相关文章
- Android HTTP实例 发送请求和接收响应
Android HTTP实例 发送请求和接收响应 Android Http连接 实例:发送请求和接收响应 添加权限 首先要在manifest中加上访问网络的权限: <manifest ... & ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- Android EditText setOnClickListener事件 只有获取焦点才能响应 采用setOnTouchListener解决
最近在学习Android开发,在编写程序的过程中,发现EditText setOnClickListener事件响应中,只有获取焦点的时候才会响应, 如当焦点在别的控件上时,只能先点击获取焦点,第二次 ...
- android小程序-电子钢琴-滑动连续响应
原创文字,转载请标明出处: 利用Button实现简单地电子钢琴,可以简单地响应按钮的click事件来发出相应的声音.但是这样不能达到手指在屏幕滑动,而连续发声的效果,就像手指在真实钢琴按键上滑过一样. ...
- Android ListView的item点击无响应的解决方法
假设listitem里面包含button或者checkbox等控件,默认情况下listitem会失去焦点,导致无法响应item的事件,最经常使用的解决的方法 是在listitem的布局文件里设置des ...
- EasyRTMP安卓Android手机直播之AAC采集、编码与RTMP推送
本文转自EasyDarwin团队Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52963378 EasyRTMP Android版de ...
- Android实例1:button点击响应
个人网站http://www.ravedonut.com/ Layout xml文件 <RelativeLayout android:layout_width="wrap_conten ...
- android 使用动画 Button移动后不响应点击事件的解决办法
animation3.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimatio ...
- Android 音频 OpenSL ES 录音 采集
1,; int channelConfig = AudioFormat.CHANNEL_OUT_STEREO; int audioFormat = AudioFormat.ENCODING_PCM_1 ...
随机推荐
- 文件操作2 cp mv rm
1.cp命令 [root@rusky /]# cp 123 /test #在linux系统中,如果文件123已经存在,则提示用户确认,在unix系统中则不提示,除非使用参数-i 交互式操作.cp: ...
- Tabs( 选项卡)
一. 加载方式 //class 加载方式<div id="box" class="easyui-tabs" style="width:500px ...
- C#。5 函数 类
函数:能够独立完成某个功能的模块. 好处:1.结构更清析(编写.维护方便 ).2.代码重用.3.分工开发. 四要素:名称,输入(参数),输出(返回的类型),加工(函 ...
- CSS选择器列表
h1 类型选择器 选择元素的一个类型 .className 类选择器 以class属性的值来选择元素,可以在一个页面中出现多个 #idName ID选择器 以id属性的值来选择元素,在页面中是唯一的, ...
- C#进程与线程
public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { / ...
- C#使用itextsharp生成PDF文件
项目需求需要生成一个PDF文档,使用的是VS2010,ASP.NET. 网络上多次搜索没有自己想要的,于是硬着头皮到itextpdf官网看英文文档,按时完成任务,以实用为主,共享一下: 使用HTML文 ...
- Oracle—用户管理的备份(一)
用户管理的备份(一) 一.首先要知道数据库中表空间和文件的信息,有几个性能视图,v$datafile,v$tablespace,v$tempfile,v$logfile,v$controlfile,d ...
- 解读CSS文本(text)样式
通过文本属性,您可以改变文本的颜色.字符间距.对齐文本.装饰文本.文本缩进,等等. color: 该属性用于改变文本的颜色,注意区分background-color. Line-height: 该属性 ...
- angularjs——工具方法
1.fromJson 把json字符串转成JSON对象 var jsonStr='[{"Name":"abc","age":12},{&qu ...
- 讨论一下PHP相关技能的层次
1.PHP编程能力 由于PHP的入门较为简单,所以暂时只有熟悉和精通两个级别. 1.熟悉PHP:精通PHP语法,掌握常用的函数,熟悉PHP5下的OOP应用,这个是基础,也没什么好说的. 2.精通PHP ...