android 简单按键修改

目的:修改按键映射表,把一个已存在的键映射为自己想要的键,然后在应用程序中捕获它。

说明:本文并没有增加额外的按键。

按键格式:key  SCANCODE  KEYCODE  [FLAGS...]

当扫描码是一个数字,键码定义在你描述的布局文件android.keylayout.xxx,另外可以设置相关的FLAGS:
SHIFT: 当按下,自动加上SHIFT键值
ALT:当按下,自动加上ALT
CAPS:当按下,自动带上CAPS大写
WAKE:当按下,当设备进入睡眠的时候,按下这个键将唤醒,而且发送消息给应用层。

WAKE_DROPPED:当按下,且设备正处于睡眠,设备被唤醒,但是不发送消息给应用层。


开发板上的键盘映射表:

# cat TWL4030_Keypad.kl
# OMAP3EVM keylayout

key 25    MENU              WAKE_DROPPED
key 24    BACK              WAKE_DROPPED
key 49    DPAD_UP           WAKE_DROPPED
key 37    HOME              WAKE
key 36    EXPLORER          WAKE
key 23    VOLUME_UP
key 28    DPAD_LEFT         WAKE_DROPPED
key 33    DPAD_CENTER       WAKE_DROPPED
key 18    DPAD_RIGHT        WAKE_DROPPED
key 103   SEARCH            WAKE
key 108   VOLUME_DOWN
key 48	  SOFT_LEFT         WAKE_DROPPED
key 30    DPAD_DOWN         WAKE_DROPPED
key 106   SOFT_RIGHT        WAKE_DROPPED
#key 105   POWER             WAKE    
key 105   1             WAKE_DROPPED



修改最后一行:

key 105   1             WAKE_DROPPED
即可响应对按键1的响应。  把原来那个对PWER的响应改成对数字1的响应。


测试代码: 上层java应用程序

package com.android.dm3730.keytest;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.widget.TextView;
import android.widget.Toast;

public class DM3730KeyActivity extends Activity {
	private static final String Tag = "DM3730_KEYBOARD_TEST";
	private TextView tv = null;
	private String str = null;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        tv = (TextView)DM3730KeyActivity.this.findViewById(R.id.tv);
    }

    
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		str = "按键为:"+ event.getKeyCode();
		switch(event.getKeyCode()){
		case KeyEvent.KEYCODE_1:{
			DisplayToastShort(DM3730KeyActivity.this,str);
			tv.setText("已经捕获到按键1,OK");
		}
		default:{
			break;
		}
		}
		return super.onKeyDown(keyCode, event);
	}

	public static void DisplayToastShort(Context context,String s)
	{
		Toast toast=Toast.makeText(context, s, Toast.LENGTH_SHORT);
		toast.setGravity(Gravity.TOP,0, 220);
		toast.show();
	}
}




Android开发中,屏蔽Home按键的行为需要谨慎处理,因为这可能会对用户的体验和设备的可用性产生负面影响。通常情况下,系统级的按键,如Home键、返回键和最近用键,是不建议屏蔽的,因为它们属于Android系统的导航机制的一部分。然而,在某些特殊情况下,开发者可能会有特定的需求需要对这些按键进行处理。 屏蔽Home按键的一个常用方法是在Activity中重写`onKeyDown`方法,并对KEYCODE_HOME键进行拦截。当检测到Home按键的按下事件时,不执行任何操作或者执行特定的逻辑,从而实现屏蔽的效果。以下是一个简单的代码示例: ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { // 这里可以执行自己的逻辑,或者直接返回true表示事件已处理完毕 return true; } return super.onKeyDown(keyCode, event); } ``` 需要注意的是,从Android 5.0(Lollipop)开始,系统对这种行为做了限制。如果用处于前台,系统会拦截掉Home键事件,不允许用直接屏蔽Home键。开发者可以通过修改AndroidManifest.xml文件中的用设置来请求系统不允许用户从最近任务列表中关闭用,但这样做也可能会引起用户不满。 ```xml <activity android:name=".YourActivity" android:excludeFromRecents="true"> ... </activity> ``` 这种方法并不直接屏蔽Home键,而是防止用被用户从最近任务列表中移除,从而间接地减少了用户按Home键离开用的机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值