我遇到了一个小问题。我从权限窗口中检索了文本。
现在我找到了一种检索应用名称的方法。我就这样做了:
private String Namer(String parse){
if(parse.length() > 30) {
parse = parse.substring(parse.indexOf("********") + 6, parse.length());
parse = parse.substring(0, parse.indexOf("*******"));
return parse;
} else {
return parse;
}
}
这就是我使用它的方式:
List<AccessibilityNodeInfo> NodeInfo;
AccessibilityNodeInfo nodeInfo = event.getSource();
for (Map.Entry<OriginalPermissions, String> permissions :
detect.entrySet()) {
NodeInfo = nodeInfo.findAccessibilityNodeInfosByText(permissions.getValue());
Log.d("Information", Namer(Namer(String.valueOf(NodeInfo))));
}
但问题是权限窗口文本可能不同。有什么方法可以从权限窗口中检索粗体文本吗?
由于
答案 0 :(得分:3)
如您所见(source code),GrantPermissionsActivity
的标题是Spanned
文字。而是依赖于周围的文本,您可以使用这样的方法获得第一个跨度(带粗体文本)的值:
public String getFirstSpanValueFromTitle(Spanned text) {
StyleSpan[] spans = text.getSpans(0, text.length(), StyleSpan.class);
if (spans.length > 0) {
int start = text.getSpanStart(spans[0]);
int end = text.getSpanEnd(spans[0]);
return String.valueOf(text.subSequence(start, end));
}
return "";
}
否则,您需要获取每种语言的permission_warning_template
资源字符串的值,并在代码中对其进行硬编码。
<强>更新强>:
如何从AccessibilityEvent对象获取标题文本的示例:
String pkgName = event.getPackageName().toString();
if ("com.google.android.packageinstaller".equals(pkgName)) {
AccessibilityNodeInfo root = event.getSource();
List<AccessibilityNodeInfo> nodes =
root.findAccessibilityNodeInfosByViewId("com.android.packageinstaller:id/permission_message");
if (nodes.size() > 0) {
Log.e(TAG, "First span value: " + getFirstSpanValueFromTitle((Spanned) nodes.get(0).getText()));
}
}