Adding a handler to AccessibilityManager.AccessibilityStateChange throws TargetInvocationException in Android 6 device

Jalza 781 Reputation points
2021-11-10T14:34:54.81+00:00

I am developing an app with accessibility properties. To catch accessibility state changes I use AccessibilityManager.AccessibilityStateChange event:

public AccessibilityService()  
{  
    this.accessibilityManager = (AccessibilityManager)CrossCurrentActivity.Current.Activity.GetSystemService(Context.AccessibilityService);  
    this.accessibilityManager.AccessibilityStateChange += this.AccessibilityManagerAccessibilityStateChange;  
}  

I tested in Android 9 phone and it works, but now I'm testing in Android 6 device and I get this exception in
AccessibilityStateChange +=
line:

Exception has been thrown by the target of an invocation.  
  at System.Reflection.RuntimeConstructorInfo.InternalInvoke (System.Object obj, System.Object[] parameters, System.Boolean wrapExceptions) [0x00018] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs:944   
  at System.RuntimeType.CreateInstanceMono (System.Boolean nonPublic, System.Boolean wrapExceptions) [0x00095] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/corlib/ReferenceSources/RuntimeType.cs:185   
  at System.RuntimeType.CreateInstanceSlow (System.Boolean publicOnly, System.Boolean wrapExceptions, System.Boolean skipCheckThis, System.Boolean fillCache) [0x00009] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/corlib/ReferenceSources/RuntimeType.cs:155   
  at System.RuntimeType.CreateInstanceDefaultCtor (System.Boolean publicOnly, System.Boolean skipCheckThis, System.Boolean fillCache, System.Boolean wrapExceptions, System.Threading.StackCrawlMark& stackMark) [0x00027] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/rttype.cs:5770   
  at System.Activator.CreateInstance (System.Type type, System.Boolean nonPublic, System.Boolean wrapExceptions) [0x00039] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/activator.cs:206   
  at System.Activator.CreateInstance (System.Type type, System.Boolean nonPublic) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/activator.cs:190   
  at System.Activator.CreateInstance (System.Type type) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/mscorlib/system/activator.cs:134   
  at Xamarin.Forms.DependencyService.Get[T] (Xamarin.Forms.DependencyFetchTarget fetchTarget) [0x00099] in D:\a\1\s\Xamarin.Forms.Core\DependencyService.cs:52   
  at MyApp.App..ctor () [0x00032] in C:\DATA\Projects\Kitchen-Eye\Code\MyApp\MyApp\MyApp\App.xaml.cs:42   
no non-static method "Landroid/view/accessibility/AccessibilityManager;.addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;Landroid/os/Handler;)V"  
  at Java.Interop.JniEnvironment+InstanceMethods.GetMethodID (Java.Interop.JniObjectReference type, System.String name, System.String signature) [0x0005b] in <bd6bd528a8784b7caf03e9f25c9f0d7b>:0   
  at Java.Interop.JniType.GetInstanceMethod (System.String name, System.String signature) [0x0000c] in <bd6bd528a8784b7caf03e9f25c9f0d7b>:0   
  at Java.Interop.JniPeerMembers+JniInstanceMethods.GetMethodInfo (System.String encodedMember) [0x00031] in <bd6bd528a8784b7caf03e9f25c9f0d7b>:0   
  at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeAbstractVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00006] in <bd6bd528a8784b7caf03e9f25c9f0d7b>:0   
  at Android.Views.Accessibility.AccessibilityManager.AddAccessibilityStateChangeListener (Android.Views.Accessibility.AccessibilityManager+IAccessibilityStateChangeListener listener, Android.OS.Handler handler) [0x0004e] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-29/mcw/Android.Views.Accessibility.AccessibilityManager.cs:433   
  at Android.Views.Accessibility.AccessibilityManager.AddAccessibilityStateChangeListener_Event_With_Handler_Helper (Android.Views.Accessibility.AccessibilityManager+IAccessibilityStateChangeListener value) [0x00000] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-29/mcw/Android.Views.Accessibility.AccessibilityManager.cs:592   
  at Java.Interop.EventHelper.AddEventHandler[TInterface,TImplementor] (System.WeakReference& implementor, System.Func`1[TResult] creator, System.Action`1[T] setListener, System.Action`1[T] add) [0x00036] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/Java.Interop/EventHelper.cs:18   
  at Android.Views.Accessibility.AccessibilityManager.add_AccessibilityStateChange (System.EventHandler`1[TEventArgs] value) [0x0000d] in /Users/builder/azdo/_work/1/s/xamarin-android/src/Mono.Android/obj/Release/monoandroid10/android-29/mcw/Android.Views.Accessibility.AccessibilityManager.cs:576   
  at MyApp.Droid.Services.AccessibilityService..ctor () [0x00027] in C:\DATA\Projects\Kitchen-Eye\Code\MyApp\MyApp\MyApp.Android\Services\AccessibilityService.cs:32   
  at (wrapper managed-to-native) System.Reflection.RuntimeConstructorInfo.InternalInvoke(System.Reflection.RuntimeConstructorInfo,object,object[],System.Exception&)  
  at System.Reflection.RuntimeConstructorInfo.InternalInvoke (System.Object obj, System.Object[] parameters, System.Boolean wrapExceptions) [0x00005] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs:936   
  --- End of managed Java.Lang.NoSuchMethodError stack trace ---  
java.lang.NoSuchMethodError: no non-static method "Landroid/view/accessibility/AccessibilityManager;.addAccessibilityStateChangeListener(Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener;Landroid/os/Handler;)V"  
	at crc64fe57f584d98dc9f4.MainActivity.n_onCreate(Native Method)  
	at crc64fe57f584d98dc9f4.MainActivity.onCreate(MainActivity.java:40)  
	at android.app.Activity.performCreate(Activity.java:6272)  
	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)  
	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)  
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)  
	at android.app.ActivityThread.access$900(ActivityThread.java:157)  
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)  
	at android.os.Handler.dispatchMessage(Handler.java:102)  
	at android.os.Looper.loop(Looper.java:148)  
	at android.app.ActivityThread.main(ActivityThread.java:5551)  
	at java.lang.reflect.Method.invoke(Native Method)  
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:731)  
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621)  

In the documentation this event doesn't exist:
https://learn.microsoft.com/en-us/dotnet/api/android.views.accessibility.accessibilitymanager

Xamarin
Xamarin
A Microsoft open-source app platform for building Android and iOS apps with .NET and C#.
5,378 questions
0 comments No comments
{count} votes

Accepted answer
  1. JarvanZhang 23,966 Reputation points
    2021-11-11T06:43:15.15+00:00

    Hello,​

    Welcome to our Microsoft Q&A platform!

    java.lang.NoSuchMethodError: no non-static method "Landroid/view/accessibility/AccessibilityManager;.addAccessibilityStateChangeListener

    This is because the addAccessibilityStateChangeListener is first introducted on Android Api 26. The method could not be used on the device with Api 23 (Android 6).

    Here is the related doc, you could refer to it.
    https://developer.android.com/reference/android/view/accessibility/AccessibilityManager#addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener,%20android.os.Handler)

    Best Regards,

    Jarvan Zhang


    If the response is helpful, please click "Accept Answer" and kindly upvote it. If you have extra questions about this answer, please click "Comment".

    Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

    0 comments No comments

0 additional answers

Sort by: Most helpful

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.