【问题标题】:What method can be used to write to a file from a custom keyboard?可以使用什么方法从自定义键盘写入文件?
【发布时间】:2015-06-28 21:57:12
【问题描述】:

目标:创建一个自定义键盘,将所有击键记录到本地日志文件中

我现在已经有一个可以使用的键盘了——这样就完成了。我已验证键盘本身可以在我的测试设备(摩托罗拉 Moto G,4.1,硬件)上运行。

问题在于:可以使用哪些方法将击键写入日志文件?

到目前为止,我的研究使我得出了这个结论:按键记录功能应该(至少部分)进入软键盘主 java 文件的 onKey 方法中。

我已经在 onKey 中添加了 commitText 和 sendKeyEvent 方法——这些是基本键盘功能所必需的。关于将击键记录到日志文件中的方法有什么想法吗?

【问题讨论】:

    标签: java android keyboard keylogger


    【解决方案1】:

    使用 google 提供的关于写入文件的文档:

    http://developer.android.com/training/basics/data-storage/files.html

    示例代码:

    String filename = "keystrokes.log";
    String data = "ActualKeyStroke";
    FileOutputStream outputStream;
    
    try {
      outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
      outputStream.write(data.getBytes());
      outputStream.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
    

    openFileOutput 是来自 Context class 的方法,它是 InputMethodService (doc)

    【讨论】:

    • 首先,谢谢,这是一个非常彻底且格式正确的答案。我认为让我绊倒的不是将数据保存到日志文件,而是如何在 onKey 方法中捕获击键的方面。我什至不知道这是否可能,但似乎应该是。在您上面的示例中,“ActualKeyStroke”是我所追求的。如何将当前按下的键的当前字符代码设置为 ActualKeyStroke(或其他)变量,然后将该变量的值作为字符串附加到 keystrokes.log 文件?或者这不是解决问题的方法?
    • onKeyDown(int notUnicodeKeyCode,KeyEvent event){ int unicodeCharPressed = event.getUnicodeChar();然后将这些整数存储在某处或将它们转换为字符串,并在时间间隔或特定操作中,例如 - 隐藏键盘 - > 将它们写入文件(打开获取字符并为单个字符写入和关闭文件是一个糟糕的设计:)所以您可以将 StringBuilder 作为您的类成员并将整数附加到它。有关寻找写入文件的好时机,请参阅documentation
    猜你喜欢
    • 2012-11-08
    • 1970-01-01
    • 2012-06-27
    • 2021-05-27
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多