Xamarin无障碍服务:处理数字KeyPress

Nit*_*ant 6 c# xamarin.android xamarin

如何在我的可访问性服务中处理物理键盘数字KeyPress,看来我丢失了一些东西,当我按物理键盘上的数字键时OnKeyEventOnAccessibilityEvent方法未命中。这是我的可访问性服务:

[Service(Label = "myApp", Permission = Manifest.Permission.BindAccessibilityService)]
[IntentFilter(new[] { "android.accessibilityservice.AccessibilityService" })]
[MetaData("android.accessibilityservice.AccessibilityService", Resource = "@xml/accessibility_service_config")]
public class TVNavigatorService : AccessibilityService
{
    public TVNavigatorService()
    {

    }

    protected override void OnServiceConnected()
    {
        var accessibilityServiceInfo = ServiceInfo;
        accessibilityServiceInfo.EventTypes = EventTypes.AllMask;
        accessibilityServiceInfo.Flags |= AccessibilityServiceFlags.IncludeNotImportantViews;
        accessibilityServiceInfo.Flags |= AccessibilityServiceFlags.RequestFilterKeyEvents;
        accessibilityServiceInfo.Flags |= AccessibilityServiceFlags.ReportViewIds;
        accessibilityServiceInfo.Flags |= AccessibilityServiceFlags.RequestTouchExplorationMode;
        accessibilityServiceInfo.FeedbackType = Android.AccessibilityServices.FeedbackFlags.AllMask;
        accessibilityServiceInfo.NotificationTimeout = 100;

        SetServiceInfo(accessibilityServiceInfo);
        base.OnServiceConnected();
    }

    protected override bool OnKeyEvent(KeyEvent e)
    {
        //this code never gets executed
        var action = e.Action;
        var keyCode = e.KeyCode;

        Console.WriteLine("key code : " + keyCode);

        return base.OnKeyEvent(e);
    }

    public override void OnAccessibilityEvent(AccessibilityEvent e)
    {
        try
        {
            //if (e.PackageName == "")
            {
                //final int eventType = event.getEventType();
                //switch(eventType) {
                //    case AccessibilityEvent.TYPE_VIEW_CLICKED:
                //        do somthing
                //        break;
                //    case AccessibilityEvent.TYPE_VIEW_FOCUSED:
                //        do somthing
                //        break;
                //}

                Console.WriteLine("event type : " + e.EventType);

                Console.WriteLine("content decription : " + e.ContentDescription);
                Console.WriteLine("package name : " + e.PackageName);
                Console.WriteLine("source : " + e.Source);
                Console.WriteLine("window id : " + e.WindowId);
                Console.WriteLine("event time : " + e.EventTime);

                var strBuilderTxt = new StringBuilder();
                foreach (var txt in e.Text)
                {
                    strBuilderTxt.Append(txt);
                }

                Console.WriteLine("actual text : " + strBuilderTxt);
            }
        }
        catch (Exception e2)
        {
            Console.WriteLine(e2.Message);
        }
    }


    public override void OnInterrupt()
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

服务配置:

<?xml version="1.0" encoding="UTF-8" ?>
<accessibility-service
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:description="@string/accessibility_service_description"
  android:packageNames=""
  android:accessibilityEventTypes="typeAllMask"
  android:accessibilityFlags="flagRequestFilterKeyEvents"
  android:accessibilityFeedbackType="feedbackAllMask"
  android:notificationTimeout="100"
  android:canRetrieveWindowContent="true"
  android:canRequestFilterKeyEvents="true"       
 />
Run Code Online (Sandbox Code Playgroud)

如何在可访问性服务中实现数字键事件?

更新 添加了onKeyEvent代码,但仍然没有运气

这是我的git repo https://github.com/nitinjs/XamarinNumericPadAccessilbiity