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
{
///
/// 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
///
///
public static void GetWIFISSID(Action 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);
}
///
/// µ±Ç°IPµØÖ·
///
public System.Net.IPAddress IpAddress
{
get
{
return System.Net.IPAddress.Parse(GetIPAddress());
}
}
///
/// ¹ã²¥µØÖ·
///
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;
}
}
}