package Ġcom . in z . z . base . util Ċ Ċ import Ġandroid . app . usage . Network Stats Ċ import Ġandroid . content . Context Ċ import Ġandroid . net .* Ċ import Ġandroid . net . wifi . Wifi Manager Ċ import Ġandroidx . annotation . NonNull Ċ import Ġjava . net . Inet 4 Address Ċ import Ġjava . net . Inet Address Ċ import Ġjava . net . NetworkInterface Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author ĠZ h eng lj Ċ Ġ* Ġ@ version Ġ 1 . 0 . 0 Ċ Ġ* ĠCreate Ġby Ġin z Ġin Ġ 2 0 1 9 / 0 7 / 1 5 Ġ 1 1 : 4 0 . Ċ Ġ*/ Ċ object ĠNetwork Util Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å½ĵåīį ç½ĳç»ľ IP Ġ åľ°åĿĢ Ġï¼Į å°± æĸ¹æ³ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget IpAddress ( context : ĠContext ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ? ĊĠĠĠĠĠĠĠ Ġval Ġinfo : ĠNetwork Info ? Ġ= Ġmanager ?. active Network Info ĊĠĠĠĠĠĠĠ Ġif Ġ( info Ġ!= Ġnull Ġ&& Ġinfo . isConnected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( info . type Ġ== ĠConnect ivity Manager . TYPE _ MOB ILE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġen : ĠEnumeration < NetworkInterface > Ġ= ĠNetwork Interface . get Network Interfaces () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( en . hasMore Elements ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Inter Ġ= Ġen . nextElement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġenum IpAddress : ĠEnumeration < Inet Address > Ġ= Ġnetwork Inter . inet Addresses ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( enum IpAddress . hasMore Elements ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġenum IpAddress . nextElement () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! address . is Loop back Address Ġ&& Ġaddress Ġis ĠInet 4 Address ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġaddress . host Address ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( info . type Ġ== ĠConnect ivity Manager . TYPE _ WIFI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwifi Manager : ĠW ifi Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context . getSystem Service ( Context . WIFI _ SERVICE ) Ġas ĠW ifi Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwifi Info Ġ= Ġwifi Manager . connection Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġint IP 2 String IP ( wifi Info . ipAddress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInt Ġ ç±»åŀĭ IP Ġ è½¬æį¢ ä¸º ĠString Ġ ç±»åŀĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġint IP 2 String IP ( ip : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġip . and ( 0 xFF ). toString () Ġ+ Ġ"." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġip . shr ( 8 ). and ( 0 xFF ) Ġ+ Ġ"." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġip . shr ( 1 6 ). and ( 0 xFF ) Ġ+ Ġ"." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġip . shr ( 2 4 ). and ( 0 xFF ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æ³¨åĨĮ ç½ĳç»ľ çĽĳåĲ¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġregister Network Callback ( context : ĠContext , Ġ@ NonNull Ġlistener : ĠNetwork State Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager : ĠConnect ivity Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠNetwork Request . Builder (). build () ĊĠĠĠĠĠĠĠ Ġmanager . register Network Callback ( request , ĠNetwork Callback Ext ( listener )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç½ĳç»ľ çĬ¶æĢģ åĽŀè°ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġclass ĠNetwork Callback Ext Ġ: ĠConnect ivity Manager . Network Callback Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġlistener : ĠNetwork State Listener ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġconstructor () Ġ: Ġsuper () ĊĠĠĠĠĠĠĠ Ġconstructor ( listener : ĠNetwork State Listener ?) Ġ: Ġsuper () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Unavailable () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Unavailable () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġinterface ĠNetwork State Listener Ġ{ ĊĊĠĠĠ Ġ} Ċ }