当您在Android中输入OS范围内的任何文本区域时(不仅在我的应用程序中),用户可以使用自动更正或单击拼写错误的单词来更正它。有没有办法得到所有拼写错误的单词列表以及它们变成了什么?
或者,这是否可以使用root设备,或者你甚至可以用你自己的字典替换自动更正来跟踪它?
答案 0 :(得分:2)
Android中的此功能由拼写检查框架提供。其documentation here和here显示了如何连接到它并与应用内的建议进行互动。
因为这是系统提供的服务,就像位置服务之类的东西一样,没有办法在没有植根的情况下在系统范围内挂钩。我没有任何个人经验来修改Android系统或其服务的内部工作方式,但作为一个起点,您可以查看任何篡改其中某些服务的输入/输出的开源应用程序,例如: GPS欺骗应用程序。
最糟糕的情况是,您必须找到拼写检查器框架编译并存储的位置,并使用可以执行您想要的修改版本覆盖它。
我能够从Android 5.1.1中找到旧版SpellCheckerService.java
here。您可以查看这个并找出您需要做什么以及在哪里。
编辑:在查看了1149个Android源回购(100+ GB)的完整列表后,我找到了两个最有可能为您填写空缺的候选人。
git clone https://android.googlesource.com/platform/frameworks/base
git clone https://android.googlesource.com/platform/packages/inputmethods/LatinIME
在基础中,您会在base/core/java/android/****/textservice/
中找到拼写检查来源,其中****
是service
,view
,widget
或{{}之一1}}(内部在com / android中)。这似乎是最低级别。这里的许多方法都是internal
。
在LatinIME中,您将找到拉丁字符集的更高级别的SpellChecker源(其他字符集还有其他存储库)。您将在abstract
中找到它们。这是您可以找到实现的地方。
在跟踪来源(特别是跟踪LatinIME/java/src/com/android/inputmethod/latin/spellcheck/
)后,呼叫将降至getSuggestionResults
级别。 Dictionary
有LatinIME/java/src/com/android/inputmethod/latin/Dictionary.java
,这意味着abstract public ArrayList<SuggestedWordInfo> getSuggestions()
有责任返回结果。不过,我认为用户可安装的字典只是一个简单的数据库,由Android系统的Dictionary
处理代码使用,这可能意味着你仍然需要修改系统代码并扎根以实现你的目标
我担心这是在兔子洞的尽可能远的地方。我担心我还没有完全回答这个问题,但是这应该会给你一些指导方向。
另一个编辑:也许我对一个可安装的字典只是一个数据库是错的。 See this example。这个例子似乎是以app的形式出现,所以我不确定。
答案 1 :(得分:0)
查找键入文字的建议
import sys
from PyQt4 import QtGui
class SystemTrayIcon(QtGui.QSystemTrayIcon):
def __init__(self, icon, parent=None):
QtGui.QSystemTrayIcon.__init__(self, icon, parent)
menu = QtGui.QMenu(parent)
edit = QtGui.QLineEdit(parent)
edit.setText("Tekstas kuris turi būti atsiradęs čia")
hl = QtGui.QVBoxLayout(parent)
hl.addWidget(QtGui.QLabel("Testuojame"))
hl.addWidget(edit)
w = QtGui.QWidget(parent)
w.setLayout(hl)
wa = QtGui.QWidgetAction(parent)
wa.setDefaultWidget(w)
menu.addAction(wa)
exitAction = menu.addAction("Blabla")
exitAction = menu.addAction("Blabla 2")
self.setContextMenu(menu)
def main():
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
trayIcon = SystemTrayIcon(QtGui.QIcon("icons/close.png"), w)
trayIcon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
如果spanned不为空,则startIndex和endIndex之间的文本中存在错误。通过改变这些索引的值,可以找到哪个词是错误的。跨区数组中的每个项都有一个名为mSuggestions的字段,该字段是一个字符串数组,并为错误的单词提供建议的单词。
还有其他检查方法:here