Reputation: 41
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)
}
===========================================================================================
Upvotes: 1
Views: 459
Reputation: 41
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.
Upvotes: 2