package Ġcom . lin wei . c ams . manager Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . bluetooth . Bluetooth Adapter Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . B ATTER Y _ SERVICE Ċ import Ġandroid . content . Context Wrapper Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Info Ċ import Ġandroid . net . wifi . Wifi Configuration Ċ import Ġandroid . net . wifi . Wifi Info Ċ import Ġandroid . net . wifi . Wifi Manager Ċ import Ġandroid . os . Battery Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . os . Stat Fs Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . tele phony . Tele phony Manager Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . format . Formatter Ċ import Ġandroid . util . Display Metrics Ċ import Ġandroid . view . WindowManager Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġcom . lin wei . c ams . ext . ctx Ċ import Ġcom . lin wei . c ams . ext . pref Ċ import Ġcom . lin wei . c ams . ext . string Ċ import Ġjava . io . File Ċ import Ġjava . io . File Filter Ċ import Ġjava . net . NetworkInterface Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ---------------------------------------------------------------- ----- Ċ Ġ* Ġ@ Author : ĠWe i Sh u ai Ċ Ġ* Ġ@ Time : Ġ 2 0 2 0 / 9 / 1 1 Ċ Ġ* Ġ@ Contact Ġlin wei 9 6 0 5 @ gmail . com Ċ Ġ* Ġ@ Follow Ġhttps :// github . com / Wei Sh u ai Dev Ċ Ġ* Ġ@ Description : Ġèİ·åıĸ æīĭæľº æīĭæľº è®¾å¤ĩ ä¿¡æģ¯ ï¼Į èİ·åıĸ åıĤæķ° ï¼ļ è®¾å¤ĩ Id [ get DeviceId ] ãĢģ è®¾å¤ĩ IC CID [ get Sim ] ãĢģ è®¾å¤ĩ åĵģ çīĮ [ get Br ands ] ãĢģ æīĭæľº åŀĭ åı· [ getM ob il ] ãĢģ Ċ Ġ* ĠCPU åŀĭ åı· [ getC pu Model ] ãĢģ ç³»ç»Ł çīĪæľ¬ [ getSystem Version ] ãĢģ å±ı å¹ķ åĪĨ è¾ ¨ çİĩ [ get Resolution ] ãĢģ wifi åĲįç§° [ get Wifi Name ] ãĢģ wifi Ġmac åľ°åĿĢ [ get Wifi Mac ] Ċ Ġ* Ġwifi ä¿¡åı· å¼º åº¦ [ get Wifi State ] ãĢģ èĵĿ çī Ļ æłĩè¯Ĩ [ get Bluetooth Address ] ãĢģ çĶµ æ±ł çĶµ éĩı [ get Battery Level ] ãĢģ ç³»ç»Ł æĹ¶éĹ´ [ getCurrent Time ] ãĢģ RAM [ get RAM Info ] Ċ Ġ* ĠROM [ get Rom Info ] ãĢģ CPU æł¸ æķ° [ getC pu Co res ] ãĢģ æĺ¯åĲ¦ å¼ĢåĲ¯ Root [ is Su Enable Root ] Ċ Ġ* ----------------------------------------------------------------------- Ċ Ġ*/ Ċ @ Suppress Lint (" Hardware Ids ") Ċ class ĠDevice Manager () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Tele phony Manager : ĠTele phony Manager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm UUID : ĠUUID ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm IME I : ĠString ? Ġ= Ġ"" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¾å¤ĩ Id ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar ĠdeviceId Storage : ĠString Ġby Ġpref ("") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¾å¤ĩ ĠI ME I Ġ ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġdevice IME I Storage : ĠString Ġby Ġpref ("") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è®¾å¤ĩ ĠI CC ID Ġ ä¿¡æģ¯ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġdevice IC CID Storage : ĠString Ġby Ġpref ("") ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠINSTANCE : ĠDevice Manager ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): ĠDevice Manager Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠINSTANCE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠDevice Manager (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Tele phony Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . getSystem Service ( Context . TELE PHONY _ SERVICE ) Ġas ĠTele phony Manager ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* èİ·åıĸ UUID ĊĠĠĠĠ Ġ* Ġ@ re tr un Ġ[ UUID ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġ@ Suppress Lint (" Obsolete Sdk Int ") ĊĠĠĠ Ġfun Ġget UUID (): ĠUUID ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString ? Ġ= ĠdeviceId Storage ĊĠĠĠĠĠĠĠ Ġif Ġ(! id . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm UUID Ġ= ĠUUID . fromString ( id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . Secure . getString ( ctx . getContent Resolver (), ĠSettings . Secure . ANDROID _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtm Device : ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtm Serial : ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Permission ( ctx , Ġpermission . READ _ PHONE _ STATE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtm Device Ġ= Ġm Tele phony Manager ?. deviceId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtm Serial Ġ= Ġm Tele phony Manager ?. sim SerialNumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( tm Device ) Ġ|| Ġtm Device Ġ== Ġ" unknown " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠText Utils . isEmpty ( tm Serial ) Ġ|| Ġtm Device Ġ== Ġ" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( android Id ) Ġ&& Ġ" 9 7 7 4 d 5 6 d 6 8 2 e 5 4 9 c " Ġ!= Ġandroid Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm UUID Ġ= ĠUUID . name UUID From Bytes ( android Id . toByteArray ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm UUID Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm UUID Ġ= ĠUUID ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Id . hashCode (). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtm Device . hashCode (). to Long () Ġshl Ġ 3 2 Ġor Ġtm Serial . hashCode (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm UUID ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId Storage Ġ= Ġit . string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġm UUID ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* èİ·åıĸ IME I ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġfun Ġget DeviceId (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġm IME I Ġ= Ġdevice IME I Storage ĊĠĠĠĠĠĠĠ Ġif Ġ( m IME I ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm IME I Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm IME I Ġ= Ġget UUID (). toString () ĊĠĠĠĠĠĠĠ Ġm IME I ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice IME I Storage Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġm IME I Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ è®¾å¤ĩ IC CID ( sim ) ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Sim (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġic c Id : ĠString ? Ġ= Ġdevice IC CID Storage ĊĠĠĠĠĠĠĠ Ġif Ġ( icc Id ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġic c Id ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Permission ( ctx , Ġpermission . READ _ PHONE _ STATE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġic c Id Ġ= Ġm Tele phony Manager ?. sim SerialNumber ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġic c Id Ġ= Ġget UUID (). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġic c Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice IC CID Storage Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġic c Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ è®¾å¤ĩ åĵģ çīĮ ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Br ands (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġandroid . os . Build . B RAND ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æīĭæľº åŀĭ åı· ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Mob il (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġandroid . os . Build . MODEL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCPU åŀĭ åı· ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġfun Ġget Cpu Model (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBuild . CPU _ ABI ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å½ĵåīį æīĭæľº ç³»ç»Ł çīĪæľ¬ åı· ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget System Version (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġandroid . os . Build . VERSION . RELEASE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å±ı å¹ķ åĪĨ è¾ ¨ çİĩ ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Resolution (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetric Ġ= ĠDisplay Metrics () ĊĠĠĠĠĠĠĠ Ġval Ġwindow Manager : ĠWindow Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . getSystem Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠ Ġwindow Manager . default Display . get Real Metrics ( metric ) ĊĠĠĠĠĠĠĠ Ġval Ġwidth : ĠInt Ġ= Ġmetric . width Pixels ĊĠĠĠĠĠĠĠ Ġval Ġheight : ĠInt Ġ= Ġmetric . height Pixels ; ĊĠĠĠĠĠĠĠ Ġval Ġdensity D pi : ĠInt Ġ= Ġmetric . density D pi ; ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ width ÃĹ $ height Ġ- $ density D pi " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ wifi åĲįç§° ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Wifi Manager Potential Leak ") ĊĠĠĠ Ġ@ Deprecated (" Wifi Name ") ĊĠĠĠ Ġfun Ġget Wifi Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwifi Mgr : ĠW ifi Manager Ġ= Ġctx . getSystem Service ( Context . WIFI _ SERVICE ) Ġas ĠW ifi Manager ĊĠĠĠĠĠĠĠ Ġval Ġinfo : ĠW ifi Info Ġ= Ġwifi Mgr . connection Info ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Id : ĠInt Ġ= Ġinfo . network Id ĊĠĠĠĠĠĠĠ Ġval Ġconfigured Networks : ĠMutable List < Wifi Configuration > Ġ= Ġwifi Mgr . configured Networks ĊĠĠĠĠĠĠĠ Ġvar Ġss id Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġrun Ġbreaking @{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfigured Networks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . network Id Ġ== Ġnetwork Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss id Ġ= Ġit . SSID ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ breaking ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( ssid . contains ("\ "" )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġss id Ġ= Ġss id . replace (" \"", Ġ"") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġss id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ wifi åĲįç§° ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġfun Ġget New Wifi Name (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġss id Ġ= Ġ" unknown Ġid " ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ<= ĠBuild . VERSION _ CODES . O Ġ|| ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . P ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwifi Mgr : ĠW ifi Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . application Context . getSystem Service ( Context . WIFI _ SERVICE ) Ġas ĠW ifi Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinfo : ĠW ifi Info Ġ= Ġwifi Mgr . connection Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinfo . ssid . replace (" \"", Ġ"") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Build . VERSION . SDK _ INT Ġ== ĠBuild . VERSION _ CODES . O _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconn Manager : ĠConnect ivity Manager Ġ= Ġctx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnetwork Info : ĠNetwork Info ? Ġ= Ġconn Manager . active Network Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( network Info ?. isConnected Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( network Info . extra Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnetwork Info . extra Info . replace (" \"", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġss id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ wifi Ġmac Ġ åľ°åĿĢ ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Wifi Mac (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Interfaces : ĠEnumeration < NetworkInterface > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Interface . get Network Interfaces () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( network Interfaces . hasMore Elements ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelement : ĠNetwork Interface ? Ġ= Ġnetwork Interfaces . nextElement () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress : ĠByteArray Ġ= Ġelement ?. hardware Address Ġ?: Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . name Ġ== Ġ" w lan 0 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . append ( String . format ("% 0 2 X :", Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( builder . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . delete Char At ( builder . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ wifi ä¿¡åı· å¼º åº¦ Ġstate ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Wifi Manager Potential Leak ") ĊĠĠĠ Ġfun Ġget Wifi State (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwifi Mgr : ĠW ifi Manager Ġ= Ġctx . getSystem Service ( Context . WIFI _ SERVICE ) Ġas ĠW ifi Manager ĊĠĠĠĠĠĠĠ Ġval Ġinfo : ĠW ifi Info Ġ= Ġwifi Mgr . connection Info ĊĠĠĠĠĠĠĠ Ġif Ġ( info . ssid Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstrength : ĠInt Ġ= ĠW ifi Manager . calculate Signal Level ( info . rssi , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstrength . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ èĵĿ çī Ļ æłĩè¯Ĩ ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Bluetooth Address (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbluetooth : ĠBluetooth Adapter Ġ= ĠBluetooth Adapter . getDefault Adapter () ĊĠĠĠĠĠĠĠ Ġreturn Ġbluetooth . address ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ çĶµ éĩı ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Int ] Ġ çĶµ éĩı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Battery Level (): ĠInt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbattery Manager : ĠB attery Manager ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . getSystem Service ( B ATTER Y _ SERVICE ) Ġas ĠB attery Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbattery Manager ?. getInt Property ( Battery Manager . B ATTER Y _ PROPERTY _ CAP ACITY ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent : ĠIntent ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Wrapper ( ctx ). register Receiver ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Filter ( Intent . ACTION _ B ATTER Y _ CHANGED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent ?. getInt Extra ( Battery Manager . EXTRA _ LEVEL , Ġ- 1 ) !! Ġ* Ġ 1 0 0 Ġ/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getInt Extra ( Battery Manager . EXTRA _ SCALE , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ å½ĵåīį æĹ¶éĹ´ ĊĠĠĠĠ Ġ* Ġ@ param Ġformat Ġ[ String ] Ġ æł¼å¼ı æķ°æį® ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" SimpleDateFormat ") ĊĠĠĠ Ġfun ĠgetCurrent Time ( format : ĠString Ġ= Ġ" yyyy - MM - dd ĠHH : mm : ss "): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSimpleDateFormat ( format ). format ( G regorian Calendar (). time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ RAM ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget RAM Info (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager : ĠActivity Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . getSystem Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġmemory Info : ĠActivity Manager . Memory Info Ġ= ĠActivity Manager . Memory Info () ĊĠĠĠĠĠĠĠ Ġmanager . get Memory Info ( memory Info ) ĊĠĠĠĠĠĠĠ Ġval Ġtotal Size : ĠLong Ġ= Ġmemory Info . total Mem ĊĠĠĠĠĠĠĠ Ġval Ġavailable Size : ĠLong Ġ= Ġmemory Info . avail Mem ĊĠĠĠĠĠĠĠ Ġreturn Ġ( Formatter . format FileSize ( ctx , Ġavailable Size ) Ġ+ Ġ"/" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ ĠFormatter . format FileSize ( ctx , Ġtotal Size )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ Rom ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . J EL LY _ BE AN _ MR 2 ) ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġfun Ġget Rom Info (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile : ĠFile Ġ= ĠEnvironment . get External Storage Directory () ĊĠĠĠĠĠĠĠ Ġval Ġstat Fs Ġ= ĠStat Fs ( file . path ) ĊĠĠĠĠĠĠĠ Ġval ĠblockSize Long Ġ= Ġstat Fs . block Size Long ĊĠĠĠĠĠĠĠ Ġval Ġblock Count Long Ġ= Ġstat Fs . block Count Long ĊĠĠĠĠĠĠĠ Ġval Ġavailable Blocks Long Ġ= Ġstat Fs . available Blocks Long ĊĠĠĠĠĠĠĠ Ġreturn ĠFormatter . format FileSize ( ctx , Ġavailable Blocks Long Ġ* ĠblockSize Long ) Ġ+ Ġ"/" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFormatter . format FileSize ( ctx , Ġblock Count Long Ġ* ĠblockSize Long ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCPU æł¸ æķ° ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ String ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Cpu Co res (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġget NumberOf CPU Co res () ĊĠĠĠĠĠĠĠ Ġreturn Ġcount . toString () Ġ+ Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget NumberOf CPU Co res (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ("/ sys / devices / system / cpu / "). list Files ( CPU _ FILTER ) !!. size ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠCPU _ FILTER Ġ= ĠFile Filter Ġ{ Ġpathname Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġpathname . name ĊĠĠĠĠĠĠĠ Ġif Ġ( path . startsWith (" cpu ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 3 Ġuntil Ġpath . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path [ i ] Ġ< Ġ' 0 ' Ġ|| Ġpath [ i ] Ġ> Ġ' 9 ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ File Filter Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ File Filter Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ root æĪĸ æĺ¯åĲ¦ å®ŀä½ĵ ĊĠĠĠĠ Ġ* Ġ 1 æĺ¯ root æľº åĴĮ èĻļæĭŁ æľº ĊĠĠĠĠ Ġ* Ġ 0 æĺ¯ éĿŀ root æľº åĴĮ å®ŀä½ĵ æľº ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Int ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Su Enable Root (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġfile : ĠFile ? ĊĠĠĠĠĠĠĠ Ġval Ġpaths : ĠArray < String > Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ system / bin /", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ system / x bin /", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ system / sbin /", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ sbin /", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ vendor / bin /", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ su / bin /" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( path : ĠString Ġin Ġpaths ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Ġ= ĠFile ( path Ġ+ Ġ" su ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . exists () Ġ&& Ġfile . can Execute ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( x : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġvirtual Machine : ĠInt ? Ġ= Ġnull ; ĊĠĠĠ Ġfun Ġcheck DeviceInfo (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠBoolean Ġ= Ġ( Build . F ING ER PRINT . startsWith (" generic ") Ġ// Ġ åĶ¯ä¸Ģ è¯ĨåĪ« çłģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . MODEL . contains (" google _ sdk ") Ġ// Ġ çīĪæľ¬ ĠçĶ¨æĪ· æľĢç»Ī åı¯ä»¥ è§ģ çļĦ åĲįç§° ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . MODEL . toLowerCase ( Locale . ROOT ). contains (" d roid 4 x ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . MODEL . contains (" Em ulator ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . MODEL . contains (" Android ĠSDK Ġbuilt Ġfor Ġx 8 6 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . MAN U FACT UR ER . contains (" Gen ym otion ") Ġ// Ġ ç¡¬ ä»¶ åĪ¶ éĢł åķĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . HARD WARE Ġ== Ġ" gold fish " Ġ|| ĠBuild . HARD WARE Ġ== Ġ" v box 8 6 " Ġ|| ĠBuild . PRODUCT Ġ== Ġ" sdk " Ġ|| ĠBuild . PRODUCT Ġ== Ġ" google _ sdk " Ġ|| ĠBuild . PRODUCT Ġ== Ġ" sdk _ x 8 6 " Ġ|| ĠBuild . PRODUCT Ġ== Ġ" v box 8 6 p " Ġ|| ĠBuild . BOARD . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains (" n ox ") Ġ// Ġ ä¸» æĿ¿ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . BOOT LOAD ER . toLowerCase ( Locale . ROOT ). contains (" n ox ") Ġ// Ġ ç³»ç»Ł åĲ¯åĬ¨ ç¨ĭåºı çīĪæľ¬ åı· ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . HARD WARE . toLowerCase ( Locale . ROOT ). contains (" n ox ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . PRODUCT . toLowerCase ( Locale . ROOT ). contains (" n ox ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠBuild . SERIAL . toLowerCase ( Locale . ROOT ). contains (" n ox ")) Ġ// Ġ ç¡¬ ä»¶ åºıåĪĹ åı· ĊĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġor Ġ( Build . B RAND . startsWith (" generic ") Ġ&& ĠBuild . DEVICE . startsWith ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" generic " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġif Ġ( result ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult Ġor Ġ(" google _ sdk " Ġ== ĠBuild . PRODUCT ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æŁ¥ æĿĥéĻĲ ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġ[ Context ] ĊĠĠĠĠ Ġ* Ġ@ param Ġperm Name Ġ[ permission ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Permission ( context : ĠContext , Ġperm Name : Ġpermission ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġperm : ĠInt Ġ= Ġcontext . check Calling Or Self Permission (" android . permission .$ perm Name ") ĊĠĠĠĠĠĠĠ Ġreturn Ġperm Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġenum Ġclass Ġpermission Ġ{ ĊĠĠĠĠĠĠĠ ĠREAD _ PHONE _ STATE , ĊĠĠĠĠĠĠĠ ĠWRITE _ EXTERNAL _ STORAGE ĊĠĠĠ Ġ} Ċ }