精华内容
下载资源
问答
  • android自定义按键

    2016-01-07 09:25:00
    android自带菜单键、返回键、搜索键的重写 转自:http://blog.sina.com.cn/s/blog_7cb9b3b801015yk8.html 返回键 publicvoidonBackPressed(){ //TODOAuto-generatedmethodstub Toasttoast=Toast.makeT...

    android自带菜单键、返回键、搜索键的重写

    转自:http://blog.sina.com.cn/s/blog_7cb9b3b801015yk8.html
     

    返回键   

    public void onBackPressed() {  

        // TODO Auto-generated method stub   

        Toast toast=Toast.makeText(config.this, "此键坏掉了。。。\n按旁边的吧!", 3000);  

        toast.setGravity(Gravity.CENTER, 0, 0);  

        toast.show();  

    搜索键

        @Override  

       public boolean onSearchRequested() {  

         // TODO Auto-generated method stub   

         Toast.makeText(config.this, "我一直是坏掉的。。。", 1000).show();  

         return super.onSearchRequested();  

      } 

    菜单键

    @Override  

    public boolean onCreateOptionsMenu(Menu menu) {  

      // TODO Auto-generated method stub   

      menu.add(0, 0, 0, "退出");  

      return super.onCreateOptionsMenu(menu);  

      }  

     @Override  

     public boolean onOptionsItemSelected(MenuItem item) {  

       // TODO Auto-generated method stub   

       switch (item.getItemId()) {  

          case 0:  

          finish();  

          break; 

         

       return super.onOptionsItemSelected(item);  

     

    <SPAN style="COLOR: #ff0000">先禁止Home键,再在onKeyDown里处理按键值,点击Home键的时候就把程序关闭</SPAN> 

     

    public boolean onKeyDown(int keyCode, KeyEvent event)  

        // TODO Auto-generated method stub   

        if(KeyEvent.KEYCODE_HOME==keyCode)  

        android.os.Process.killProcess(android.os.Process.myPid());  

        return super.onKeyDown(keyCode, event);  

    @Override  

    public void onAttachedToWindow()  

    {

          // TODO Auto-generated method stub   

          this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);  

          super.onAttachedToWindow();  

    }        

    加权限禁止Home键  

    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission>  

    转载于:https://www.cnblogs.com/iverson-weng/p/5108696.html

    展开全文
  • public class CustomListener { private static long mLastClickTime; private long timeInterval = 1000L; public CustomListener() { long nowTime = System.currentTimeMillis(); ...
    public class CustomListener {
        private static long mLastClickTime;
        private long timeInterval = 1000L;
    
        public CustomListener() {
            long nowTime = System.currentTimeMillis();
            if (nowTime - mLastClickTime > timeInterval) {
                onSingleClick();// 单次点击事件
                mLastClickTime = nowTime;
            }
        }
    
        public CustomListener(long interval) {
            this.timeInterval = interval;
        }
    
        protected void onSingleClick() {
        }
    
    }

     

    展开全文
  • 网上存在一些关于Android系统添加自定义按键的文章,但大多针对Android2.3和4.0系统的,许多文件都已经变动位置了,这两天我总结了一些,写出来欢迎大家交流与指正: Android系统通过*.kl文件将Linux按键传给上层,...

    网上存在一些关于Android系统添加自定义按键的文章,但大多针对Android2.3和4.0系统的,许多文件都已经变动位置了,这两天我总结了一些,写出来欢迎大家交流与指正:


         Android系统通过*.kl文件将Linux按键传给上层,最新的Android4.4已经不再默认qwerty.kl文件了,代之的是frameworks/base/data/keyboards/Generic.kl文件,当然如果定义板级键值文件,还是以rk29-keypad.kl文件优先。

     

        在3288/device/rockchip/rksdk目录下的rk29-keypad.kl文件中有相关键值的定义:

    1. key 59    MENU
    2. key 102   HOME
    3. key 114   VOLUME_DOWN
    4. key 115   VOLUME_UP
    5. key 116   POWE                WAKE
    6. key 143   NOTIFICATION       WAKE
    7. key 158   BACK
    8. key 212   CAMERA
    9. key 217   SEARCH

    复制代码

    说明:

    WAKE: 当设备睡眠时按下此键,设备将被唤醒,按键事件将会被发送到应用程序。

    WAKE_DROPPED: 当设备睡眠时按下此键,设备将被唤醒,而按键事件不会被发送到应用程序。

     

           瑞星微的按键分为GPIO和ADC两种,定义在/kernel/arch/arm/boot/dts目录下的firefly-rk3288.dts文件:

    1. &adc {        
    2.           status = "okay";
    3.  
    4.           key {               
    5.                  compatible = "rockchip, key";               
    6.                  io-channels = <&adc 1>;
    7.  
    8.                  vol-up-key {                       
    9.                          linux, code = <115>;                       
    10.                          label = "volume up";                       
    11.                          rockchip, adc_value = <1>;               
    12.                  };
    13.  
    14.                  vol-down-key {                       
    15.                         linux, code = <114>;                       
    16.                         label = "volume down";                       
    17.                         rockchip, adc_value = <170>;               
    18.                  };
    19.                  power-key {                        
    20.                        gpios = <&gpio0 GPIO_A4 GPIO_ACTIVE_LOW>;                        
    21.                        linux, code = <116>;                     
    22.                        label = "power";                       
    23.                        gpio-key, wakeup;  // 具有唤醒功能               
    24.                  };
    25.  
    26.                  menu-key {                        
    27.                        linux, code = <139>;                        
    28.                        label = "menu";                       
    29.                        rockchip, adc_value = <355>;         
    30.                  };
    31.                  home-key {               
    32.                       linux, code = <102>;
    33.                       label = "home";
    34.                       rockchip, adc_value = <746>;
    35.                 };
    36.                 back-key {
    37.                       linux, code = <158>;
    38.                       label = "back";
    39.                       rockchip, adc_value = <560>;
    40.                };
    41.                camera-key {
    42.                       linux, code = <212>;
    43.                       label = "camera";
    44.                       rockchip, adc_value = <450>;
    45.               };         
    46.       };

    复制代码

           先在linux内核中添加新的按键值(当然不用宏定义直接写数值也可以),网上一般写在/include/linux/input/input.h文件中添加,实际3.10内核在/include/uapi/ linux/input.h文件中:

    #defineKEY_RESERVED     0

    #define KEY_ESC         1

    #define KEY_1           2

    ...

    #defineKEY_MY           250

     

          对于Android层次,在rk29-keypad.kl文件中增加按键值后,还需要修改一些文件,系统才能处理,首先修
    改KeycodeLabels.h文件,4.4版本将其移到了frameworks/native/include/input目录下,对KEYCODES数组添加按键码:
    static const KeycodeLabelKEYCODES[] = {
      ...
      { "MY_KEYS" ,250},

      { NULL,0 }
              最后一定要以NULL结尾,其中的TV_KEYMOUSE_LEFT按键就是瑞星微添加的,再去frameworks/native/include/android/keycode.h文件中添加:enum {
       AKEYCODE_UNKNOWN         = 0,
        ....
        ....
    添加
        AKEYCODE_MY_KEYS  =250,


           同样AKEYCODE_TV_KEYMOUSE_LEFT宏也是瑞星微添加的,如果要添加系统按键值,还需要修改

    frameworks/base/libs/ui/input.java(android4.4已变为frameworks/native/libs/input/input.cpp)文件:

    boolKeyEvent::hasDefaultAction(int32_t keyCode)

    {

        switch (keyCode) {

            case AKEYCODE_HOME:

            case AKEYCODE_BACK:

            ...

            case AKEYCODE_MY_KEYS:

                return true;

     

            还有下面的:

    boolKeyEvent::isSystemKey(int32_t keyCode) {

        switch (keyCode) {

            case AKEYCODE_MENU:

            ...

            case AKEYCODE_MY_KEYS:

                return true;

        }

            return false;

    }

     

           还要修改frameworks/base/core/java/android/view/KeyEvent.java文件:
    public staticfinal int KEYCODE_TV_MEDIA_PAUSE = 249;

    public staticfinal int KEYCODE_MY_KEYS        = 250;

    private staticfinal int LAST_KEYCODE = KEYCODE_MY_KEYS;


           注意一定要修改LAST_KEYCODE,下面的populateKeycodeSymbolicNames数组也需要添加:

    names.append(KEYCODE_MY_KEYS, " KEYCODE_MY_KEYS ");

     

           修改frameworks/base/core/res/res/values/attr.xml文件:

    <!--This enum provides the same keycode values as can be found in      

    {@link android.view.KeyEvent}. --><attrname="keycode">

           <enum name="KEYCODE_UNKNOWN"value="0" />

           ...

           <enumname="KEYCODE_TV_MEDIA_PAUSE" value="249" />

           <enum name="KEYCODE_MY_KEYS" value="250" /></attr>

     

           对于网上说的/external/webkit/Source/WebKit/android/plugins/ANPKeyCodes.h文件已经移除。

     

           以上文件都改完之后frameworks/base/api/current.txt也要随之更新,如果未更新,可运行 makeupdate-api 进行更新

           如果对新键值进行处理,可以通过获取相应的keycode,对它进行处理。对于按键事件的处理一般如下文件中:
    frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

     

    @Override   

    public intinterceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn)

    {

      ...

      switch (keyCode) {

          case KeyEvent.KEYCODE_VOLUME_DOWN:

          ...

          case KeyEvent. KEYCODE_MY_KEYS:  // 添加处理代码

    展开全文
  • 主要介绍了Android自定义按键添加广播和通过广播给当前焦点输入框赋值的相关资料,需要的朋友可以参考下
  • 1.kernel-4.4/arch/arm64/boot/dts/mediatek/tb8788p1_64_...其中633与634为自定义按键 &keypad { + mediatek,kpd-hw-init-map = <114 633 0 0 0 0 0 0 0 580 634 0 0 0 0 0 0 0 102 158 0 0 0 0 0 0 0 0 0...

    1.kernel-4.4/arch/arm64/boot/dts/mediatek/tb8788p1_64_bsp.dts
    其中633与634为自定义按键

    &keypad {
    +       mediatek,kpd-hw-init-map = <114 633 0 0 0 0 0 0 0 580 634 0 0 0 0 0 0 0 102 158 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     };
    
    

    2.kernel-4.4/include/uapi/linux/input-event-codes.h
    其中0x279与0x280是633与634的十六进制。

     #define KEY_KBDINPUTASSIST_CANCEL              0x265
    +#define KEY_NEOSTRA_P          0x279
    +#define KEY_NEOSTRA_F          0x280
     
     #define BTN_TRIGGER_HAPPY              0x2c0
    
    

    3.device/mediateksample/tb8788p1_64_bsp/mtk-kpd.kl
    其中633与634要和第1点kernel中配置一致,NEOSTRA_P和NEOSTRA_F为上层调用的自定义名称。

     key 602   HALL_AWAY
    +key 633   NEOSTRA_P
    +key 634   NEOSTRA_F
    
    

    4.frameworks/native/include/input/InputEventLabels.h

         DEFINE_KEYCODE(REFRESH),
    +    DEFINE_KEYCODE(NEOSTRA_P),
    +    DEFINE_KEYCODE(NEOSTRA_F),
    

    5.frameworks/native/include/android/keycodes.h
    其中286与287是285的叠加

    -    AKEYCODE_REFRESH = 285
    +    AKEYCODE_REFRESH = 285,
     
    +    AKEYCODE_NEOSTRA_P = 286,
    +    AKEYCODE_NEOSTRA_F = 287
    
    

    6.frameworks/base/core/res/res/values/attrs.xml
    其中286与287是285的叠加

             <enum name="KEYCODE_REFRESH" value="285" />
    +        <enum name="KEYCODE_NEOSTRA_P" value="286" />
    +        <enum name="KEYCODE_NEOSTRA_F" value="287" />
    
    

    7.frameworks/base/core/java/android/view/KeyEvent.java
    其中286与287是285的叠加

         public static final int KEYCODE_REFRESH = 285;
     
    -    private static final int LAST_KEYCODE = KEYCODE_REFRESH;
    +    public static final int KEYCODE_NEOSTRA_P = 286;
    +    public static final int KEYCODE_NEOSTRA_F = 287;
    +
    +    private static final int LAST_KEYCODE = KEYCODE_NEOSTRA_F;
    

    8.frameworks/base/api/current.txt
    其中286与287是285的叠加

         field public static final int KEYCODE_REFRESH = 285; // 0x11d
    +    field public static final int KEYCODE_NEOSTRA_P = 286; // 0x11e
    +    field public static final int KEYCODE_NEOSTRA_F = 287; // 0x11f
         field public static final int KEYCODE_RIGHT_BRACKET = 72; // 0x48
    
    

    9.最后在上层检测自定义按键响应事件,做对应的逻辑处理

    if(keyCode == KeyEvent.KEYCODE_NEOSTRA_P){
        ......
    }
    
    if(keyCode == KeyEvent.KEYCODE_NEOSTRA_F){
        ......
    }
    
    展开全文
  • 当我们给Android设备外接键盘时,某些自定义按键点击时可能无法唤醒屏幕,但又需要做到可以唤醒屏幕,要唤醒需使用到电源管理中PowerManager,可以自定义一个PowerManager类对象,在执行自定义按键按下操作处,添加...
  • 全志R16平台Android下添加自定义按键

    千次阅读 2016-12-19 21:26:33
    先在linux-3.4/inlcude/linux/input/h添加自定义按键#define SOCHIP_EXT1 0x2e8 该键值最好不要跟系统的键值冲突,然后编写linux下的key driver代码。#include &lt;linux/module.h&gt; #include &lt;...
  • android添加自定义按键

    千次阅读 2014-01-24 18:12:16
    (1)mediatek\config\hexing72_wet_jb3\mtk-kpd.kl(这个...(4)frameworks\base\core\java\android\view\KeyEvent.java (5)frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java
  • 主要介绍了android自定义形状的按键实例代码,本文分步骤给大家介绍的非常详细,需要的朋友可以参考下
  • android5.0输入系统添加自定义按键

    千次阅读 2017-08-31 10:07:05
    申明:本按键添加没有用到全志sys_config.fex配置io。 Board:全志R16 SDK:Android KitKat 4.4.2、Linux-3.4 ...1.先在linux-3.4/inlcude/linux/input.h添加自定义按键#define SOCHIP_EXT1 0x2e8 该键
  • Android O 高通 lk自定义按键恢复出厂设置功能1. 添加按键2. 添加触发事件 项目需求,机器新增了一个自定义按键,用于开机恢复出厂设置。看了项目lk源码,源码里本来自带 “音量+ 电源键”的组合方式进入fastboot...
  • 参考: https://www.cnblogs.com/blogs-of-lxl/p/9490205.html https://blog.csdn.net/u012719256/article/details/52252647 ... 案例一: 蓝牙遥控器连接蓝牙后,按键无反应: getevent 发...
  • 自定义View之自定义按键圆角边框背景
  • 自定义按键

    2013-07-01 17:42:12
    类似钢琴音的12个基准音,频率从440HZ到它的2倍,每次乘以2的开12次方,即可得到该基准音。
  • Android 自定义功能按键实现

    千次阅读 2017-01-19 14:22:19
    我们在做Android 系统开发时,可能由于硬件需要,需要加入一些定义功能按键,但是怎么去实现这些按键的功能呢? 下面就是博主的基于rk3288 板子的一些经验1、实体按键比如有一些实体按键可能要定义这个按键的功能。...
  • 自定义View之自定义按键圆角边框背景添加点击效果
  • 效果图: 这次主要记录如何改变button的形状。...然后在新建的drawable xml文件写控制按键形状的代码。 代码如下: &lt;?xml version="1.0" encoding="utf-8"?&gt; &...
  • Android 添加新的键值,自定义按键

    千次阅读 2014-10-20 15:49:07
    一般情况下,这些键值是够用的,但是如果想扩充的话,还是需要添加新的键值的,那么如何将一个新的键值从驱动的设置映射到上层,使应用可以对我们自定义的键值进行相应的处理呢? 对keypad来说,涉及到的文件有以下...
  • 纯代码单色或渐变色按钮效果 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#55ff0000">... android:st.
  • android蓝牙4.0BLE apk 带16个自定义按键和自定义指令 字符接收 https://pan.baidu.com/s/1eRSfprO android蓝牙2.0 2.1 apk 带16个自定义按键和自定义指令 字符接收 带自动连接 https://pan.baidu.com/s/1geKBC47
  • 一、给自定义按键添加广播 修改PhoneWindowManager.java中的interceptKeyBeforeDispatching方法 /frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @Override public ...
  • 最近需要做个唤醒功能,当按键的时候android系统唤醒并点亮屏,在长按键中,系统不能在进入睡眠。   [cpp] view plaincopyprint? 驱动方面: 1:在平台设备文件中添加 一个按键,定义为唤醒源! \...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,916
精华内容 7,566
关键字:

安卓自定义按键