-1

hoping you can help, i have tried absolutely everything to get this working. I tried to adapt other code which apparently works in android studio to work in Xamarin. I have reached a point i cant pass. here is what i have...

Ideally i need to create a proxy from the OnStartTetheringCallback class as seen in the android studio examples (https://stackoverflow.com/a/52219887) but the library doesnt appear to be available for xamarin. Please Help!

public bool EnableTethering()
    {

        try
        {

            var context = Android.App.Application.Context;
            ConnectivityManager manager = ConnectivityManager.FromContext(context);

            var methods = manager.Class.GetDeclaredMethods()
                .Select(m => new KeyValuePair<Java.Lang.Reflect.Method, Java.Lang.Class[]>(m, m.GetParameterTypes()));
            var callbackClass = manager.Class.GetDeclaredClasses().First(c => c.Name == "android.net.ConnectivityManager$OnStartTetheringCallback");
            var method = methods.First(m => m.Key.Name == "startTethering").Key; //manager.Class.GetDeclaredMethod("startTethering");//, new Java.Lang.Class[] { classFromType<int>(), classFromType<bool>(), classOnStartTetheringCallback(), classFromType<Handler>() } );


            if (method == null)
            {
            }
            else
            { 
                method.Invoke(manager, new Java.Lang.Object[] { 0, false, callbackClass });

            }
            return true;
        }
        catch (Exception e)
        {
        }
        return false;
    }

===================================================================================================
{Java.Lang.IllegalArgumentException: method android.net.ConnectivityManager.startTethering
argument 3 has type android.net.ConnectivityManager$OnStartTetheringCallback, got java.lang.Class<android.net.ConnectivityManager$OnStartTetheringCallback>
  at Java.Interop.JniEnvironment+InstanceMethods.CallObjectMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x0006e] in <8b3b636835d84984ba4604c1f57b1983>:0 
  at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeAbstractObjectMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x00014] in <8b3b636835d84984ba4604c1f57b1983>:0 
  at Java.Lang.Reflect.Method.Invoke (Java.Lang.Object obj, Java.Lang.Object[] args) [0x0004b] in <84ca7e914f6148f0b961431a9ac4287b>:0 
  at Millsnet.SpotUp.Services.WifiService.EnableTethering () [0x000af] in C:\Users\djmil\source\repos\Millsnet.SpotUp\Millsnet.SpotUp\Millsnet.SpotUp\Services\WifiService.cs:149 
  --- End of managed Java.Lang.IllegalArgumentException stack trace ---
java.lang.IllegalArgumentException: method android.net.ConnectivityManager.startTethering argument 3 has type android.net.ConnectivityManager$OnStartTetheringCallback, got java.lang.Class<android.net.ConnectivityManager$OnStartTetheringCallback>
    at java.lang.reflect.Method.invoke(Native Method)
    at mono.java.lang.RunnableImplementor.n_run(Native Method)
    at mono.java.lang.RunnableImplementor.run(RunnableImplementor.java:30)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7711)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
}
===========================================================================================

1 Answers1

0

I managed to resove this.

I compiled a xamarin library of LindeIn/DexMaker so now i can use the proxy maker. https://github.com/djmillsuk/LinkedIn-DexMaker-Xamarin

I then targetted android 11 as the starttethering is not working on android 10.

it is now working perfectly.