【问题标题】:How to use Wifimanager.LocalOnlyHotspotCallback in Xamarin.Forms如何在 Xamarin.Forms 中使用 Wifimanager.LocalOnlyHotspotCallback
【发布时间】:2019-01-14 08:21:37
【问题描述】:

环境是android中的Xamarin.forms, 但没有这方面的信息。

如何从 callback.onstarted 获取 WifiConfiguration ?

或者我可以 WifiManager.LocalOnlyHotspotReservation 从 callback.onstarted 中获取价值吗?

请检查下面的代码,该代码是关于使用 wifi AP over oreo 版本的代码

当java代码,我参考这篇文章 a link

    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 不会输出任何东西。

【问题讨论】:

  • 你想用WifiManager实现什么
  • 制作localhotspot并将一些设备连接到热点。不需要互联网连接,我需要彼此的设备连接。就像内网一样
  • 好的,请检查下面的答案,注意我没有添加依赖服务,只是正确转换了本机代码

标签: android xamarin xamarin.forms wifi hotspot


【解决方案1】:

我转换了 Java 代码 here 并提出了以下似乎可行的解决方案,请查看并告诉我它是否适合您。

添加一个从WifiManager.LocalOnlyHotspotCallback 继承的回调类并传递活动,在我的情况下它是 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; }

然后使用这些方法在该 Activity 中打开或关闭 wifi,还请注意,如果需要,您可以为 wifi 管理器设置一个全局字段。

 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();
        }
    }

祝你好运

随时恢复

【讨论】:

  • 谢谢,G.hakim。这对我来说很有用。我从这里学习了很多。
  • 能否添加依赖服务代码?我不能去上班。另外,你需要为 iOS 做什么?
  • @FreakyAli 你能分享示例 android 代码以在 2 个 android 设备之间共享文件吗..
  • @ninjajack 检查acadgild.com/blog/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
相关资源
最近更新 更多