在为我的密码管理器实现 Android 自动填充功能时,我无法获取与用户交互的网页的域名。在测试其他密码管理器时,我看到他们能够获取域,因为他们能够根据存储在各种记录中的域来过滤响应。例如,如果我有 3 条以“yahoo.com”为域的记录和 6 条具有不同域的其他记录,当我点击雅虎登录表单上的用户名字段时,我只看到 3 条带有“ yahoo.com”作为域,这是正确的功能。在我自己的应用程序中,当我点击用户名字段时,我会看到所有 9 条记录。我无法获得适当过滤记录所需的域。
我详细研究了文档,并使用了Google 的示例进行开发。
我没有发现任何提及获取域可能有任何困难,但我无法获取我需要的数据。下面是我如何尝试在页面上获取域名的示例。
public void onFillRequest(FillRequest request, CancellationSignal cancellationSignal, FillCallback callback) {
List<FillContext> context = request.getFillContexts();
AssistStructure structure = context.get(context.size() - 1).getStructure();
ArrayMap<String, AutofillId> fields = new ArrayMap<>();
int nodes = structure.getWindowNodeCount();
for (int i = 0; i < nodes; i++) {
AssistStructure.ViewNode node = structure.getWindowNodeAt(i).getRootViewNode();
String webDomain = node.getWebDomain();
if (webDomain != null){
Log.d(TAG,"domain: " + webDomain);
}
addAutofillableFields(fields, node);
}
FillResponse response = createResponse(this, fields);
callback.onSuccess(response);
}
我无法获得真正的 webDomain 值。只有空……</p>
它在应用程序中运行良好,因为我只需要 packageName 来识别应用程序。但是对于浏览器页面,我需要一个页面域名。
如果有人能告诉我我做错了什么,我将不胜感激。该项目发布在这里-