成都创新互联网站制作重庆分公司

android键值,android测试键值apk

android的手机,键盘定义fn键,用作数字和字母切换,请问这个键值应该定义成多少

如果是自定义键盘里面的话,xml文件里面的简直可以是-3,如下内容:

创新互联公司是一家专业提供始兴企业网站建设,专注与成都做网站、成都网站设计、H5页面制作、小程序制作等业务。10年已为始兴众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。

Key android:codes="-3" android:keyWidth="20%p"

android:keyIcon="@drawable/sym_keyboard_done"

android:keyEdgeFlags="left" /

android HOME长按之后的键值是多少

home键在KeyEvent中的键值为3.

ublic static final int KEYCODE_HOME            = 3;

当用户按下home键的时候(包括长按),程序会进入到PhoneWindowManager.java类中的public boolean interceptKeyBeforeDispatching(WindowState win, int action, int flags,int keyCode, int scanCode, int metaState, int repeatCount, int policyFlags)这个方法中进行处理。如果用户是连续点击home,此时就要执行长按home事件了。

即执行mHandler.postDelayed(mHomeLongPress,ViewConfiguration.getGlobalActionKeyTimeout());对应的代码。也就会跳转到mHomeLongPress这个Runnable接着往下执行。

interceptKeyBeforeDispatching这个方法位于PhoneWindowManager.java中。

位置为:\frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java  

public boolean interceptKeyBeforeDispatching(WindowState win, int action, int flags,  

int keyCode, int scanCode, int metaState, int repeatCount, int policyFlags) {  

final boolean down = (action == KeyEvent.ACTION_DOWN);  

...  

//4、用户按下home,然后马上释放。此时这个条件成立。将之前postDelayed的事件remove掉。此时就不会执行长按home事件。  

if ((keyCode == KeyEvent.KEYCODE_HOME)  !down) {  

mHandler.removeCallbacks(mHomeLongPress);  

}  

//5、第一次按下home,mHomePressed为false。  

if (mHomePressed) {  

if (keyCode == KeyEvent.KEYCODE_HOME) {  

//a、如果用户连续按下home,此时暂时没有up事件。所以就不走这里。  

//b、如果用户没有连续按下home,此时过来的是up(move或者)事件。即!down为true,执行该方法  

if (!down) {  

mHomePressed = false;  

if (!canceled) {  

boolean incomingRinging = false;  

try {  

ITelephony telephonyService = getTelephonyService();  

if (telephonyService != null) {  

incomingRinging = telephonyService.isRinging();  

}  

} catch (RemoteException ex) {  

Log.w(TAG, "RemoteException from getPhoneInterface()", ex);  

}  

if (incomingRinging) {  

Log.i(TAG, "Ignoring HOME; there's a ringing incoming call.");  

} else {  

//单击home处理  

launchHomeFromHotKey();  

}  

} else {  

Log.i(TAG, "Ignoring HOME; event canceled.");  

}  

}  

}  

return true;  

}  

...  

//  1、第一次处理home按下  

if (keyCode == KeyEvent.KEYCODE_HOME) {  

// If a system window has focus, then it doesn't make sense  

// right now to interact with applications.  

WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;  

if (attrs != null) {  

final int type = attrs.type;  

if (type == WindowManager.LayoutParams.TYPE_KEYGUARD  

|| type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {  

// the "app" is keyguard, so give it the key  

return false;  

}  

final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;  

for (int i=0; itypeCount; i++) {  

if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {  

// don't do anything, but also don't pass it to the app  

return true;  

}  

}  

}  

//  2、第一次按下home,会调用postDelayed发送一个延时处理的操作。同时将mHomePressed置为true。  

// 如果第5 步没有进入if (!down),此时就要执行长按home方法了。  

if (down  repeatCount == 0) {  

if (!keyguardOn) {  

mHandler.postDelayed(mHomeLongPress, ViewConfiguration.getGlobalActionKeyTimeout());  

}  

mHomePressed = true;  

}  

return true;  

} //其他键的处理  

else if(...){...}

android怎么模拟发送键值

说的具体点,比如你想发送个哪一个按键,试试“+a”,代码发出两行来看看。你后面两行问得有点搞不清你到底想发什么键。

请教如何查看android键值定义

在代码里看就可以,如

public class Main extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// 查看android键值定义

KeyEvent.(按Alt+/查看所有定义的)

return super.onKeyDown(keyCode, event);

}

Android怎样监听蓝牙耳机的按键事件

其实对于Android系统,每次按键只会有一个唯一「键值」响应,使用起来感觉会模模糊糊的,但是其实对于系统来说是很清晰的。

AVRCP全称(Audio/Video Remote Control Profile),是蓝牙协议中的一个profile。从名字上就可以看出主要应用于Audio/Video控制。每个按键并不是独立的,上-曲/下一曲是在正在播放音乐的时候才会有效,即才会向Android发送「键值」。

基于按键从Linux到Android分析具体对于的键值:

Linux扫描码 功能    映射字串               Android键值

00c8 200     开始放音乐  MEDIA_PLAY          KEYCODE_MEDIA_PLAY

00c9 201     停止放音乐  MEDIA_PAUSE         KEYCODE_MEDIA_PAUSE

00a3 163        下一曲      MEDIA_NEXT          KEYCODE_MEDIA_NEXT

00a5 165        上-曲      MEDIA_PREVIOUS     KEYCODE_MEDIA_PREVIOUS

Android应用代码,完整测试应用:TeskKey。

总结:1号键会交替发送KEYCODE_MEDIA_PLAY/KEYCODE_MEDIA_PAUSE;2/3号键会在播放音乐时分别发送KEYCODE_MEDIA_PREVIOUS/.KEYCODE_MEDIA_NEXT。如果想要把蓝牙耳机上的按键利用起来,可以在接收到KEYCODE_MEDIA_PLAY时播放 无声音乐 以使能2/3号键。这样就能完整接收3种键值了自行控制了。这个具体自行设计(测试代码已经更新包含了)。

注:这种实现并不一定通用,比如我在深度定制的MIUI中测试,尽管启动的TestKey应用,系统自带的音乐播放器仍然能同时响应键值。

更新:

已经更新TestKey源码,添加对蓝牙耳机按键的监听,实现方法就是上述中推测的方法,已经成功验证过了。播放音乐参考《Android多媒体开发--资源文件播放》。效果图:

需要说明一点的是,程序带了两个音乐文件在/res/raw中,默认播放的是lapple.mp3一个有声音的mp3音乐文件,silence10sec.mp3是一个无声音的10秒钟音乐文件,实际应用中可以使用它。

问与答

1.这个只能在播放音乐的状态下才能监听到么?

答:根据上述的原理,这些按键也仅仅是应用在控制媒体时使用;且根据实际验证没有播放音乐时蓝牙耳机的2/3号键是并没有向Android设备发送键值(从底层Linux来看)。综上所述,需要通过播放音乐来实现激活其向Android设备发送键值,针对这种情况可以播放一个「没有声音」的音乐文件来实现,这样既可以监听到2/3号键又可以不影响其它声音的输出。可以在前台时播放音乐,后台停止播放。

2.我现在主要是想监听得到开关键(1号键)。 在做一个按下蓝牙开关键后启动一个语音识别的功能?

答:在我的测试条件下,1号键是可以正常监听到的。1号键会交替发送KEYCODE_MEDIA_PLAY/KEYCODE_MEDIA_PAUSE键值。这个键不需要模拟播放音乐就可以正常的监听到。

3. 4号按键的监听方法

答:所谓的4号按键,也就是指本文中的所测试型号的蓝牙耳机上并没有,但有可能其它型号的蓝牙耳机上有。我没有办法测试验证,所以这里就简单叙述一下「新按键」的键值确定思路:1.先使用TestKey测试应用测试按键,测试Android上层是否可以得到对应键值。2.如果没有得到,那么就使用adb shell getevent来看Linux底层可以不可以得到键值。然后根据按键从Linux到Android来确定Android上层使用的键值码到底是多少。(当然,如果你实在不知道如何监听,把蓝牙耳机寄给我,我给你确定也行。:))

注:其实上述文章完全是根据按键从Linux到Android测试确定下来的。那是篇文章是剥开Android外壳来看「按键」事件的流程的,方法适用于所有输入事件:各种按键/触摸/物理键盘/鼠标等待输入设备。没有一定的Linux开发经验很难看懂和理解。

4. Android后台监听按键怎么实现

或:如何启动一次应用后在后台一直监听播放键 因为有这样一个场景 在用户开车的时候需按一下开关键就启动语音识别的功能。

这个问题其实已经超出了本文讨论的范围,是Android系统对应用层的键盘事件(按键)的分发的问题了。正常情况下,按键只会向当前最端的应用分发键盘事件,也就是说在后台你边音量键都监听不了。

但是既然这种情况(后台应用监听按键)的需求存在,那么就一定有它存在的道理。比如「相机键」,按下后直接调出相机到最前台。从表面上看是相机响应了按键,但是从实现方法上来看,并不是通过键值来操作,必须通过其它方法,比如广播或者其它等等。

明白了其中的道理后,那么想要实现就好办了。先看这个按键有没有广播,如要有接听系统中发出来的广播;如果没有那么对于定制系统可以自己在系统中添加一个广播;总之,正常渠道是没有办法在后台监听一些不应该是你监听到的按键的。

更:查了一下,这个按键是有广播的。这样就可以后台响应了(不需要C/不需要root)。例子我就不试了,见Android官方例子RandomMusicPlayer。

其中的重点是这个广播android.intent.action.MEDIA_BUTTON。


分享文章:android键值,android测试键值apk
URL地址:http://cxhlcq.com/article/dsgigsh.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部