22
33using System . Net ;
44using Android . Content ;
5+ using Android . Net ;
56using Android . Net . Wifi ;
7+ using Java . Net ;
68
79public class LocalIpService : ILocalIpService
810{
911 public IPAddress GetLocalIpAddress ( )
1012 {
11- var context = Android . App . Application . Context ;
12- var wifiManager = ( WifiManager ) context . GetSystemService ( Context . WifiService ) ;
13- var ip = wifiManager ? . ConnectionInfo ? . IpAddress ?? 0 ;
14-
15- var ipAddress = string . Format (
16- "{0}.{1}.{2}.{3}" ,
17- ( ip & 0xFF ) ,
18- ( ip >> 8 ) & 0xFF ,
19- ( ip >> 16 ) & 0xFF ,
20- ( ip >> 24 ) & 0xFF
21- ) ;
22-
23- return IPAddress . Parse ( ipAddress ) ;
13+ if ( OperatingSystem . IsAndroidVersionAtLeast ( 23 ) )
14+ {
15+ var connectivityManager = ( ConnectivityManager ? ) Android . App . Application . Context . GetSystemService ( Context . ConnectivityService ) ;
16+
17+ var activeNetwork = connectivityManager ? . ActiveNetwork ;
18+ if ( activeNetwork == null )
19+ {
20+ return IPAddress . Loopback ;
21+ }
22+
23+ var linkProperties = connectivityManager ? . GetLinkProperties ( activeNetwork ) ;
24+ if ( linkProperties ? . LinkAddresses == null )
25+ {
26+ return IPAddress . Loopback ;
27+ }
28+
29+ foreach ( var linkAddress in linkProperties . LinkAddresses )
30+ {
31+ var address = linkAddress . Address ;
32+ if ( address is not Inet4Address || address . IsLoopbackAddress )
33+ {
34+ continue ;
35+ }
36+
37+ var hostAddress = address . HostAddress ;
38+ if ( ! string . IsNullOrEmpty ( hostAddress ) && IPAddress . TryParse ( hostAddress , out var ipAddress ) )
39+ {
40+ return ipAddress ;
41+ }
42+ }
43+ }
44+ else
45+ {
46+ var context = Android . App . Application . Context ;
47+ var wifiManager = ( WifiManager ? ) context . GetSystemService ( Context . WifiService ) ;
48+ var ip = wifiManager ? . ConnectionInfo ? . IpAddress ?? 0 ;
49+
50+ var ipAddress = $ "{ ( ip & 0xFF ) } .{ ( ip >> 8 ) & 0xFF } .{ ( ip >> 16 ) & 0xFF } .{ ( ip >> 24 ) & 0xFF } ";
51+
52+ return IPAddress . Parse ( ipAddress ) ;
53+ }
54+
55+ return IPAddress . Loopback ;
2456 }
2557}
0 commit comments