如何在 Xamarin.Forms 中使用 Wifimanager.LocalOnlyHotspotCallback
How to use Wifimanager.LocalOnlyHotspotCallback in Xamarin.Forms
android 中的环境是 Xamarin.forms,
但没有关于此的信息。
如何从 callback.onstarted 获取 WifiConfiguration?
或者我可以 WifiManager.LocalOnlyHotspotReservation 从 callback.onstarted 中获取价值吗?
请检查下面的代码,代码是关于在 oreo 版本上使用 wifi AP
当java代码时,我参考这篇文章
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 不输出任何东西。
我转换了 Java 代码 并提出了以下似乎有效的解决方案,请看一下,让我知道它是否适合你。
添加一个继承自 WifiManager.LocalOnlyHotspotCallback
的回调 class 并传递 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; }
然后使用这些方法在 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();
}
}
祝你好运
随时恢复
android 中的环境是 Xamarin.forms, 但没有关于此的信息。
如何从 callback.onstarted 获取 WifiConfiguration?
或者我可以 WifiManager.LocalOnlyHotspotReservation 从 callback.onstarted 中获取价值吗?
请检查下面的代码,代码是关于在 oreo 版本上使用 wifi AP
当java代码时,我参考这篇文章
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 不输出任何东西。
我转换了 Java 代码
添加一个继承自 WifiManager.LocalOnlyHotspotCallback
的回调 class 并传递 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; }
然后使用这些方法在 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();
}
}
祝你好运
随时恢复