XamarinAndroid_辅助服务获取不到当前页面节点

张天星 2020-10-14 02:34:52


[Service(
Label = nameof(InitAccessibilityService),
Permission = "android.permission.BIND_ACCESSIBILITY_SERVICE"
)]
[IntentFilter(new string[] { "android.accessibilityservice.AccessibilityService" })]
public class InitAccessibilityService : AccessibilityService
{
public static InitAccessibilityService mService { get; private set; }

protected override void OnServiceConnected()
{
base.OnServiceConnected();
var info = new InitAccessibilityServiceInfo
{
Flags = AccessibilityServiceFlags.Default,
EventTypes = EventTypes.AllMask,
FeedbackType = FeedbackFlags.AllMask,
NotificationTimeout = 100
};
SetServiceInfo(info);
mService = this;
}

public override void OnAccessibilityEvent(AccessibilityEvent e)
{
var root = e.Source;
if(root == null)
{
//这里为什么会获取到空值啊
}
}
}

另一个获取页面的方式也是空的:

//直接获取当前页面是空的
AccessibilityNodeInfo root = InitAccessibilityService.mService.RootInActiveWindow;
//获取Windows的列表,Count()==0,也没有东西
var rootLists = InitAccessibilityService.mService.Windows.ToList();
var roots = rootLists.Select(s => s.Root).ToList();

Xamarin可搜索到的东西太少了。
我找到关于辅助服务的内容,都是关于java android的的,
这一段代码,我也是照着安卓的代码改过来的。
实际运行之后,辅助服务初始化正常,但捕获到屏幕事件之后,event中看不到当前页面,不知道问题出在哪里,求教。
或者,有没有这方面的博客教程,我百度找,都是java android的。。。
...全文
5742 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈继塬 2021-12-08
  • 打赏
  • 举报
回复

放弃了吗?到现在资料还是很少

张天星 2021-12-24
  • 举报
回复
@陈继塬 可以了,重写对象不生效,我就将配置写到xml中,加载后有效,看我上一楼回复。
张天星 2021-02-01
  • 打赏
  • 举报
回复

[MetaData("android.accessibilityservice", Resource = "@xml/accessibility_service_config")]
通过重写AccessibilityServiceInfo,我是没办法了。 但是通过xml配置,还是可以成功开启canRetrieveWindowContent,获取到页面节点。
正怒月神 2020-10-14
  • 打赏
  • 举报
回复
没有用过Xamarin, 之前开发android的扫描,也是直接使用android sdk和java开发。 当时也是由于Xamarin国内资料不多,所以没选。 只能帮顶了。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧