Nit*_*ant 6 c# xamarin.android xamarin
如何在我的可访问性服务中处理物理键盘数字KeyPress,看来我丢失了一些东西,当我按物理键盘上的数字键时OnKeyEvent,OnAccessibilityEvent方法未命中。这是我的可访问性服务:
[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
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |