构建一个简单的键盘记录器 Android 应用程序:虚拟键盘的辅助功能研究

2023-12-30

我一直在尝试寻找一些资源,以便为 Android 平台(APILevel 17)上的辅助功能研究项目构建键盘记录器 Android 应用程序。

应用程序的界面将是一个简单的“编辑文本”用户使用以下命令键入的字段虚拟屏幕键盘[从输入设置中选择所需的键盘后]。

I aim to create a Keylog database for my application (with an SQLite DB because I'm familiar with that, but a simple csv file DB would also work well! :) ) which looks like the following: enter image description here (Illustration)

因此,我需要在输入新条目时立即记录每个字符以及时间戳。 我一直在尝试用“文本观察器 http://developer.android.com/reference/android/text/TextWatcher.html" Class

    EditText KeyLogEditText = (EditText) findViewById(R.id.editTextforKeyLog);
    TextWatcher KeyLogTextWatcher = new TextWatcher() {
        
        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) 
        {   }
        
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) 
        {   }
        
        @Override
        public void afterTextChanged(Editable arg0) {
    // TODO Log the characters in the SQLite DB with a timeStamp etc.
    // Here I call my database each time and insert an entry in the database table. 
    //I am yet to figure out how to find the latest-typed-character by user in the EditText 
                            
        }

我的问题是:

  1. 这是实现这一点的正确方法吗?
  2. 我是否可以获取与时间一起键入的恰好一个字符并将其插入到 SQLite DB 中,以便稍后获取和分析?
  3. 或者会onKeyUp http://developer.android.com/reference/android/view/KeyEvent.Callback.html方法更有用吗? [我还没有使用过尝试过的方法,所以如果有人能指出我使用它来构建一个键盘记录器(如果更简单的话),那就太好了!]

*提前感谢任何可以以任何方式帮助我的人!

Adit*


目前您的 TextWatcher 尚未绑定到 EditText

你应该使用addTextChangedListener(TextWatcher yourWatcher)在你的 EditText 上。 这是我的例子:

      smsET.addTextChangedListener(new TextWatcher() {

        public void onTextChanged(CharSequence s, int start, int before, int count) {
        Log.d(TAG, "onTextChanged start :"+start +"  end :"+count);}
        public void beforeTextChanged(CharSequence s, int start, int count,int after) {
            Log.d(TAG, "beforeTextChanged start :"+start +"  after :"+after);
        }

        public void afterTextChanged(Editable s) {
                int lastPosition = s.length()-1;
            char lastChar = s.charAt(lastPosition);
            Log.d(TAG, "afterTextChange last char"+lastChar );
        }

    });

在你的代码中应该是这样的:

KeyLogEditText.addTextChangeListener(KeyLogTextWatcher );

该观察程序中包含的每个方法都是通过从键盘输入每个信号来触发的。 由于输入后获得了位置,因此您可以轻松获取输入的字符

为了存储您提到的数据,SharedPreferences 将比 DB 更快。 (许多写入数据库)如果您的目标至少是 api 11,您可以简单地使用 StringSetEditor.putStringSet http://developer.android.com/reference/android/content/SharedPreferences.Editor.html#putStringSet%28java.lang.String,%20java.util.Set%3Cjava.lang.String%3E%29如果您的目标较低也是可能的,例如:http://androidcodemonkey.blogspot.com/2011/07/store-and-get-object-in-android-shared.html http://androidcodemonkey.blogspot.com/2011/07/store-and-get-object-in-android-shared.html

.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建一个简单的键盘记录器 Android 应用程序:虚拟键盘的辅助功能研究 的相关文章

随机推荐

  • 启用 Sleuth 会减慢请求速度(很多)

    我将 Spring Cloud Feign 和 Sleuth 与 Zipkin 服务器结合使用 我的问题是 当我启用 Sleuth 时 任何简单的请求至少需要 600 毫秒 请注意 出于测试目的 我将 Sleuth 的采样器百分比设置为 1
  • http 代理背后的 PHP Composer

    我在网络上使用 Composer 其中访问互联网的唯一方法是使用 HTTP 或袜子代理 我有 http proxy 和 https proxy 环境变量 当 compose 尝试访问 HTTPS URL 时 我得到以下信息 file cou
  • Maven、Scala、Spring、AspectJ

    有谁知道是否可以在编译时使用aspectJ和spring编织scala类 我的编译时编织适用于我的所有 java 类 但我似乎无法让它适用于使用 Configurable 的 scala 类 作为背景 我已经为此工作了几天 多么痛苦啊 无论
  • shell 脚本中的“if [ -t 1 ]”有什么作用?

    我有将 zsh 设置为默认 shell 的代码 if t 1 then exec zsh fi 该命令具体执行什么操作if t 1 在这里做吗 我有将 zsh 设置为默认 shell 的代码 不 你没有 这不是你的代码所做的 尽管它产生了类
  • 通过 WebDAV 脚本为 NextCloud 文件添加标签

    我使用 NextCloud 11 来存储我的个人文件 并使用文档中的简单curl 脚本将文件上传到我的 NextCloud 驱动器 curl u user pw T test pdf http localhost nextcloud rem
  • 将 pdf 转换为 txt 文件的函数的输出重定向到 python 中的新文件夹

    我正在使用 python 3 我的代码使用 pdfminer 将 pdf 转换为文本 我想在新文件夹中获取这些文件的输出 目前它位于现有文件夹中 使用 pdfminer 从该文件夹转换为 txt 如何将输出重定向到不同的文件夹 我希望输出位
  • PHP $_Server 无法正常工作[重复]

    这个问题在这里已经有答案了 我有以下几行 div class social http SERVER HTTP HOST SERVER REQUEST URI div 一切都很棒 它显示了当前的链接 比方说 http www example
  • 重置 Android 文本视图最大行数

    我想制作一个可以通过用户触摸折叠的 TextView 当 TextView 折叠时 我设置textView setMaxLines 4 如何在扩展方法中清除此状态 我只能想到打电话setMaxLines 值很大 例如10000 有更好的方法
  • 并行运行多个 future,超时返回默认值

    我必须并行运行多个 future 并且程序不应崩溃或挂起 现在 我一一等待 future 如果出现 TimeoutException 则使用后备值 val future1 start future1 val future2 start fu
  • 如果提交是由标签引用而不是由分支引用,那么它是否会被垃圾收集?

    我有一个引用提交的带注释的标签 如果带注释有关系吗 并且没有分支引用那里 一段时间后提交会被垃圾收集吗 不 提交不会被垃圾收集 来自标签的引用足以使提交保持活动状态
  • eslint 使用配置了 jsconfig.json 的路径映射解决导入错误

    这是我的项目结构 src assets components constants helpers pages routes eslintrc json jsconfig json App js index js 我厌倦了 import So
  • BlockingCollection 与 Parallel.For 挂起?

    我正在玩BlockingCollection尝试更好地理解它们 但我很难理解为什么当我使用Parallel For 我只是添加一个数字 生产者 var blockingCollection new BlockingCollection
  • Request.IsLocal 替代方案?

    据我所理解 请求 IsLocal http msdn microsoft com en us library system web httprequest islocal aspx在两种情况下返回 true 如果请求发起者的IP地址是127
  • SwiftUI 自定义 PickerStyle

    我正在尝试写一个自定义PickerStyle看起来类似于SegmentedPickerStyle 这是我目前的状态 import SwiftUI public struct FilterPickerStyle PickerStyle pub
  • 使用 SocketChannel Android 连接到 websocket

    我编写了连接到 websocket 服务器 服务器应用程序和 android 应用程序的 android 应用程序Autobahn网络套接字库 我可以成功连接服务器并与服务器交换消息 但一段时间后 20 30 分钟后 Android 应用程
  • 多态 has_and_belongs_to_many

    如何定义 has and belongs to many 多态关联 情况 想象一下我们有用户 曲目 列表等 并且所有这些模型都可以被标记并使用此标签进行过滤 我想做的是 Use has and belongs to many这使得标签可以拥
  • 使用 sql 选择的值作为另一个选择的行名称

    在 MSSQL 服务器上 给定表 TABLE values int id timestamp date int value TABLE value type int value id foreign key on values id tex
  • 通过 setName() 比较组件。

    我正在编写一个图像拼图游戏 代码的一部分是将用户选择的片段与正确图像的片段进行比较 每个图像片段都已作为 ImageIcon 添加到 JButton 需要一个标识符来区分每个图像片段并进行比较 我正在为每个创建为标识符的 JButton 设
  • Java - 字段名称的别名

    假设我有一个对象 Object A String field1 abc String field2 xyz 上面的 json 是 ObjectA field1 abc field2 xyz 我试图在发送 json 之前为字段名称创建一个新的
  • 构建一个简单的键盘记录器 Android 应用程序:虚拟键盘的辅助功能研究

    我一直在尝试寻找一些资源 以便为 Android 平台 APILevel 17 上的辅助功能研究项目构建键盘记录器 Android 应用程序 应用程序的界面将是一个简单的 编辑文本 用户使用以下命令键入的字段虚拟屏幕键盘 从输入设置中选择所