Search code examples
c#androidxamarin.formsxamarin.androidandroid-wifi

Xamarin Forms Connect to Wifi >= API Level 29


I try to connect to a specific Wifi but everytime I get a System.NullReferenceException: 'Object reference not set to an instance of an object.' (commented in code)

Here is my method

public static Task ConnectToWifi(Wifi wifi)
        {
            var wifiSpecififier = new WifiNetworkSpecifier.Builder()
                .SetSsid(wifi.SSID)
                .SetWpa2Passphrase(wifi.Password)
                .SetIsHiddenSsid(wifi.Hidden)
                .Build();

            var request = new Android.Net.NetworkRequest.Builder()
                .AddTransportType(Android.Net.TransportType.Wifi)
                .RemoveCapability(Android.Net.NetCapability.Internet)
                .SetNetworkSpecifier(wifiSpecififier)
                .Build();

            var connectivityManager = Android.App.Application.Context.GetSystemService(
                Android.App.Application.ConnectivityService) as Android.Net.ConnectivityManager;

            connectivityManager.RequestNetwork(request, new NetworkCallback()); //nullex

            return Task.CompletedTask;
        }

Here is my NetworkCallback class

public class NetworkCallback : Android.Net.ConnectivityManager.NetworkCallback
    {
        public static Android.Content.Context context = Android.App.Application.Context;

        Android.Net.ConnectivityManager connectivityManager = (Android.Net.ConnectivityManager)context.GetSystemService(Android.App.Application.ConnectivityService);

        public override void OnAvailable(Android.Net.Network network)
        {
            base.OnAvailable(network);
            connectivityManager.BindProcessToNetwork(network);
        }

        public override void OnUnavailable() => base.OnUnavailable();
    }

Edit:

at Android.Runtime.JNINativeWrapper._unhandled_exception (System.Exception e) [0x0000e] in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:12 at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPL_V (_JniMarshal_PPL_V callback, System.IntPtr jnienv, System.IntPtr klazz, System.IntPtr p0) [0x0001d] in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:111 at (wrapper native-to-managed) Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPL_V(intptr,intptr,intptr)


Solution

  • Make sure to add any required permissions, I think you need this to your AppManifest to fix the error:

    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />