Как использовать Wifimanager.LocalOnlyHotspotCallback в Xamarin.Forms - PullRequest
0 голосов
/ 14 января 2019

среда Xamarin.forms в Android, но информации об этом нет.

как я могу получить WifiConfiguration от callback.onstarted?

ИЛИ могу ли я WifiManager.LocalOnlyHotspotReservation получить значение из callback.onstarted?

пожалуйста, проверьте код ниже, код собирается использовать Wi-Fi AP поверх Oreo версии

когда ява код, я ссылаюсь на эту статью ссылка

    private WifiManager wifiManager;
    private WifiManager.LocalOnlyHotspotReservation reservation;
    void SetHotSpot()
    {
        wifiManager = (WifiManager)Android.App.Application.Context.GetSystemService(Context.WifiService);

        WifiManager.LocalOnlyHotspotCallback callback = new WifiManager.LocalOnlyHotspotCallback();

        callback.OnStarted( reservation);                  
        wifiManager.StartLocalOnlyHotspot(callback, new Handler());
    }

    void getConfiguration(object sender, System.EventArgs e)
    {
        if (reservation != null)
        {
            Log.Debug("config", reservation.WifiConfiguration.Ssid);
            Log.Debug("config", reservation.WifiConfiguration.NetworkId.ToString());
            Log.Debug("config", reservation.WifiConfiguration.PreSharedKey);
            Log.Debug("config", reservation.WifiConfiguration.Bssid);
        }
    }

но когда я нажимаю кнопку, резервирование становится нулевым. поэтому Log Dose ничего не выводит.

1 Ответ

0 голосов
/ 15 января 2019

Я преобразовал код Java здесь и нашел следующее решение, которое, кажется, работает, любезно, посмотрите и дайте мне знать, работает ли оно для вас.

Добавьте класс Callback, который наследуется от WifiManager.LocalOnlyHotspotCallback, и передайте Activity в моем случае это MainActivity.

 public class OreoWifiManagerCallback : WifiManager.LocalOnlyHotspotCallback
{
    private const string TAG = nameof(OreoWifiManagerCallback);

    private MainActivity mainActivity;

    public OreoWifiManager(Activity _activity)
    {
        if (_activity.GetType() == typeof(MainActivity))
            mainActivity = (MainActivity)_activity;
    }

    public override void OnStarted(WifiManager.LocalOnlyHotspotReservation reservation)
    {
        base.OnStarted(reservation);
        Log.Debug(TAG, "Wifi Hotspot is on now");
        mainActivity.mReservation = reservation;
    }

    public override void OnFailed([GeneratedEnum] LocalOnlyHotspotCallbackErrorCode reason)
    {
        base.OnFailed(reason);
        Log.Debug(TAG, "onStopped: ");
    }

    public override void OnStopped()
    {
        base.OnStopped();
        Log.Debug(TAG, "onFailed: ");
    }
}

Затем добавьте свойство в MainActivity, чтобы отслеживать резервирование

public WifiManager.LocalOnlyHotspotReservation mReservation { get; set; }

А затем используйте эти методы, чтобы включить или отключить Wi-Fi в этом упражнении, также обратите внимание, что при необходимости вы можете иметь глобальное поле для Wi-Fi Manager.

 private void TurnOnHotspot()
    {
        var WifiManager = (WifiManager)this.Application.GetSystemService(Android.Content.Context.WifiService);
        WifiManager.StartLocalOnlyHotspot(new OreoWifiManagerCallback(this), new Handler());
    }

    private void TurnOffHotspot()
    {
        if (mReservation != null)
        {
            mReservation.Close();
        }
    }

Удачи

Не стесняйтесь вернуться в любое время

...