using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
|
using Android.App;
|
using Android.Content;
|
using Android.OS;
|
using Android.Runtime;
|
using Android.Views;
|
using Android.Widget;
|
using Android.Net.Wifi;
|
using System.Net;
|
using Java.Net;
|
using Android.Net;
|
using Android;
|
|
namespace Shared.Net
|
{
|
public class NetWiFi
|
{
|
/// <summary>
|
/// 9.0ϵͳÒÔÉÏÐèÒª¼ÓȨÏÞ android.permission.ACCESS_FINE_LOCATION¡¢android.permission.ACCESS_COARSE_LOCATION¡¢android.permission.CHANGE_WIFI_STATE
|
/// 8.1ϵͳÐèÒª¼ÓȨÏÞ android.permission.CHANGE_NETWORK_STATE android.permission.CHANGE_WIFI_STATE
|
/// ËùÓÐϵͳ°æ±¾¶¼ÐèÒª¼Ó android.permission.ACCESS_NETWORK_STATE¡¢android.permission.ACCESS_WIFI_STATE
|
/// </summary>
|
/// <param name="action"></param>
|
public static void GetWIFISSID(Action<string> action)
|
{
|
var ssid = "unknown id";
|
|
if ((int)Build.VERSION.SdkInt <= 26/*8.0*/ )
|
{
|
var mWifiManager = (WifiManager)Shared.Application.Activity.ApplicationContext.GetSystemService(Android.Content.Context.WifiService);
|
|
if (mWifiManager != null)
|
{
|
var info = mWifiManager.ConnectionInfo;
|
if (info != null)
|
{
|
ssid=info.SSID.Replace("\"", "");
|
}
|
}
|
action?.Invoke(ssid);
|
}
|
//8.1
|
else if ((int)Build.VERSION.SdkInt == 27)
|
{
|
var connManager = (ConnectivityManager)Shared.Application.Activity.ApplicationContext.GetSystemService(Android.Content.Context.ConnectivityService);
|
if (connManager != null)
|
{
|
var networkInfo = connManager.ActiveNetworkInfo;
|
if (networkInfo.IsConnected)
|
{
|
if (networkInfo.ExtraInfo != null)
|
{
|
ssid = networkInfo.ExtraInfo.Replace("\"", "");
|
}
|
}
|
}
|
action?.Invoke(ssid);
|
}
|
else /*(int)Build.VERSION.SdkInt >= 28 //9.0*/
|
{
|
(Shared.Application.Activity as BaseActivity).SetPermission((b) =>
|
{
|
if (b)
|
{
|
var mWifiManager = (WifiManager)Shared.Application.Activity.ApplicationContext.GetSystemService(Android.Content.Context.WifiService);
|
if (mWifiManager != null)
|
{
|
var info = mWifiManager.ConnectionInfo;
|
ssid = info.SSID.Replace("\"", "");
|
}
|
}
|
action?.Invoke(ssid);
|
}, Manifest.Permission.AccessFineLocation);
|
}
|
}
|
|
public string GetIPAddress()
|
{
|
string ipAddress = "127.0.0.1";
|
try
|
{
|
var wifimanage = (WifiManager)Application.Activity.BaseContext.GetSystemService(Context.WifiService);//»ñÈ¡WifiManager
|
var wifiinfo = wifimanage.ConnectionInfo;
|
if (wifiinfo.IpAddress == 0)
|
{
|
var networkInterfaces = NetworkInterface.NetworkInterfaces;
|
while (networkInterfaces.HasMoreElements)
|
{
|
var ha = (networkInterfaces.NextElement() as NetworkInterface).InetAddresses;
|
while (ha.HasMoreElements)
|
{
|
var t = (ha.NextElement() as InetAddress);
|
if (!t.IsLoopbackAddress && t.GetType() == typeof(Inet4Address))
|
{
|
return t.HostAddress;
|
}
|
}
|
}
|
}
|
else
|
{
|
ipAddress = intToIp(wifiinfo.IpAddress);
|
}
|
}catch(Exception e){
|
|
}
|
return ipAddress;
|
//return MyJar.Common.GetIpAddress(Shared.Application.Activity);
|
}
|
|
string intToIp(int i)
|
{
|
return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "." + ((i >> 24) & 0xFF);
|
}
|
|
/// <summary>
|
/// µ±Ç°IPµØÖ·
|
/// </summary>
|
public System.Net.IPAddress IpAddress
|
{
|
get
|
{
|
return System.Net.IPAddress.Parse(GetIPAddress());
|
}
|
}
|
|
/// <summary>
|
/// ¹ã²¥µØÖ·
|
/// </summary>
|
public System.Net.IPAddress BroadcastIpAddress
|
{
|
get
|
{
|
return System.Net.IPAddress.Parse(getBroadcastAddress());
|
}
|
}
|
|
|
string getBroadcastAddress()
|
{
|
//var networkInfo = ((ConnectivityManager)Android.App.Application.Context.GetSystemService(Context.ConnectivityService)).ActiveNetworkInfo;
|
//if (networkInfo != null && networkInfo.IsConnected)
|
//{
|
// if (networkInfo.Type == ConnectivityType.Wifi)
|
// {
|
|
// }
|
//}
|
|
var broadcastAddress = "0.0.0.0";
|
var eni = NetworkInterface.NetworkInterfaces;
|
while (eni.HasMoreElements)
|
{
|
var networkCard = (NetworkInterface)eni.NextElement();
|
if(!(networkCard.Name=="wlan0"||networkCard.Name=="eth0")){
|
continue;
|
}
|
var ncAddrList = networkCard.InterfaceAddresses;
|
foreach (var networkCardAddress in ncAddrList)
|
{
|
var address = networkCardAddress.Address;
|
if (!address.IsLoopbackAddress)
|
{
|
if (address.HostAddress.IndexOf(":") > 0)
|
{
|
// case : ipv6
|
continue;
|
}
|
else
|
{
|
// case : ipv4
|
broadcastAddress = networkCardAddress.Broadcast.HostAddress;
|
break;
|
}
|
}
|
}
|
|
}
|
return broadcastAddress;
|
}
|
}
|
|
|
}
|