package Ġcom . did ich ux ing . d ora emon kit . util Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . App Ops Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . hardware . Camera Ċ import Ġandroid . location . Location Manager Ċ import Ġandroid . media . Audio Format Ċ import Ġandroid . media . Audio Record Ċ import Ġandroid . media . Media Recorder Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . os . Process Ċ import Ġandroid . provider . Contacts Contract Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . tele phony . Tele phony Manager Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġandroidx . annotation . Size Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ Ċ /** Ċ Ġ* Ġ@ desc : Ġ æĿĥéĻĲ æ£Ģæµĭ å·¥åħ· ç±» Ċ Ġ*/ Ċ object ĠPermission Util Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Permission Util " ĊĊĠĠĠ Ġ// éŁ³ é¢ĳ è¾ĵåħ¥ - éº ¦ åħĭ é£İ ĊĠĠĠ Ġprivate Ġconst Ġval ĠA UDIO _ INPUT Ġ= ĠMedia Recorder . Audio Source . MIC ĊĊĠĠĠ Ġ// éĩĩçĶ¨ é¢ĳ çİĩ ĊĠĠĠ Ġ// 4 4 1 0 0 æĺ¯ çĽ®åīį çļĦ æłĩåĩĨ ï¼Į ä½Ĩæĺ¯ æŁĲ äºĽ è®¾å¤ĩ ä»į çĦ¶ æĶ¯æĮģ 2 2 0 5 0 ï¼Į 1 6 0 0 0 ï¼Į 1 1 0 2 5 ĊĠĠĠ Ġ// éĩĩ æł· é¢ĳ çİĩ ä¸ĢèĪ¬ åħ± åĪĨ ä¸º 2 2 . 0 5 K Hz ãĢģ 4 4 . 1 K Hz ãĢģ 4 8 K Hz ä¸īä¸ª çŃī çº§ ĊĠĠĠ Ġprivate Ġconst Ġval ĠA UDIO _ SAMPLE _ RATE Ġ= Ġ 1 6 0 0 0 ĊĊĠĠĠ Ġ// å£° éģĵ Ġ åįķ å£° éģĵ ĊĠĠĠ Ġprivate Ġconst Ġval ĠA UDIO _ CHANNEL Ġ= ĠAudio Format . CHANNEL _ IN _ MON O ĊĊĠĠĠ Ġ// ç¼ĸçłģ ĊĠĠĠ Ġprivate Ġconst Ġval ĠA UDIO _ ENCODING Ġ= ĠAudio Format . ENCODING _ PCM _ 1 6 BIT ĊĠĠĠ Ġprivate Ġconst Ġval ĠOP _ SYSTEM _ ALERT _ WINDOW Ġ= Ġ 2 4 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ åħ·æľī æ Ĥ¬ æµ ® çªĹ æĿĥéĻĲ ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcan Draw Overlay s ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// android Ġ 6 . 0 åıĬ ä»¥ ä¸ĬçļĦ åĪ¤æĸŃ æĿ¡ä»¶ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . can Draw Overlay s ( context ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġcheck Op ( context , ĠOP _ SYSTEM _ ALERT _ WINDOW ) ĊĠĠĠĠĠĠĠ Ġ// android Ġ 4 . 4 ~ 6 . 0 çļĦ åĪ¤æĸŃ æĿ¡ä»¶ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Op ( context : ĠContext , Ġop : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext . getSystem Service ( Context . APP _ OPS _ SERVICE ) Ġas ĠApp Ops Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz : ĠClass < *> Ġ= ĠApp Ops Manager :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġclazz . getDeclared Method (" check Op ", ĠInt :: class . java Primitive Type , ĠInt :: class . java Primitive Type , ĠString :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApp Ops Manager . MODE _ ALLOWED Ġ== Ġmethod . invoke ( manager , Ġop , ĠProcess . my Uid (), Ġcontext . packageName ) Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNoSuch Method Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegal AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvocation TargetException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè¯·æ±Ĥ æ Ĥ¬ æµ ® çªĹ æĿĥéĻĲ ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrequest Draw Overlay s ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (" android . settings . action . MANAGE _ OVER LAY _ PERMISSION ", ĠUri . parse (" package :" Ġ+ Ġcontext . packageName )) ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ! is ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( intent . resolve Activity ( context . package Manager ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log Helper . e ( TAG , Ġ" No Ġactivity Ġto Ġhandle Ġintent ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Mock Location Enabled ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġis Mock Location Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// if Ġmar shm allow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġops Manager Ġ= Ġcontext . getSystem Service ( Context . APP _ OPS _ SERVICE ) Ġas ĠApp Ops Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ops Manager Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mock Location Ġ= Ġops Manager . check Op ( App Ops Manager . OP STR _ MOCK _ LOCATION , ĠProcess . my Uid (), Ġcontext . packageName ) Ġ== ĠApp Ops Manager . MODE _ ALLOWED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġmar shm allow Ġthis Ġwill Ġalways Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Mock Location Ġ= ĠSettings . Secure . getString ( context . content Resolver , Ġ" mock _ location ") Ġ!= Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġis Mock Location ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTarget Version Sdk å¤§äºİ 6 . 0 æĹ¶çļĦ æĿĥéĻĲ æ£ĢæŁ¥ æĸ¹æ³ķ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġperms ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Permissions ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Size ( min Ġ= Ġ 1 ) Ġvar arg Ġperms : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAlways Ġreturn Ġtrue Ġfor ĠSDK Ġ< ĠM , Ġlet Ġthe Ġsystem Ġdeal Ġwith Ġthe Ġpermissions ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" has Permissions : ĠAPI Ġversion Ġ< ĠM , Ġreturning Ġtrue Ġby Ġdefault ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠD ANG ER ĠZ ONE !!! ĠChanging Ġthis Ġwill Ġbreak Ġthe Ġlibrary . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠNull Ġcontext Ġmay Ġbe Ġpassed Ġif Ġwe Ġhave Ġdetected ĠLow ĠAPI Ġ( less Ġthan ĠM ) Ġso Ġgetting ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġthis Ġpoint Ġwith Ġa Ġnull Ġcontext Ġshould Ġnot Ġbe Ġpossible . ĊĠĠĠĠĠĠĠ Ġrequire NotNull ( context ) Ġ{ Ġ" Can 't Ġcheck Ġpermissions Ġfor Ġnull Ġcontext " Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( perm Ġin Ġperms ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( context , Ġperm ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æµĭ æĺ¯åĲ¦ æľī sd åį¡ è¯» åĨĻ æĿĥéĻĲ ï¼Į ä¸įåı¯ éĿ ł ãĢĤ æĹł sd åį¡ æĪĸèĢħ ç£ ģ çĽĺ æ»¡ äºĨ çļĦ æĥħåĨµä¸ĭ ï¼Į åį³ ä½¿ èµĭ äºĪ äºĨ æĿĥéĻĲ ä¹Ł åı¯èĥ½ æĬ¥ æĹł æĿĥéĻĲ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck Storage Un reli able (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠoutputStream : ĠFileOutputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar ĠinputStream : ĠFileInputStream ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( Environment . get External Storage Directory (). toString () Ġ+ ĠFile . separator Ġ+ Ġ". D ora emon kit Test . kit ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . write ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . flush () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream Ġ= ĠFileInputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . read () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æµĭ æĺ¯åĲ¦ æľī å®ļä½į æĿĥéĻĲ ï¼Į ä¸įåı¯ éĿ ł ï¼Į æ¯Ķå¦Ĥ åľ¨ å®¤ åĨħ æīĵå¼Ģ app ï¼Į è¿Ļç§į æĥħåĨµä¸ĭ å®ļä½į æ¨¡åĿĹ æ²¡æľī åĢ¼ ï¼Į ä¼ļ æĬ¥ æĹł æĿĥéĻĲ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") ĊĠĠĠ Ġfun Ġcheck Location Un reli able ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Manager Ġ= Ġcontext . getSystem Service ( Context . LOCATION _ SERVICE ) Ġas ĠLocation Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . check Self Permission ( context , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠActivity Compat . check Self Permission ( context , ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġlocation Manager . getLast Known Location ( Location Manager . GPS _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation 2 Ġ= Ġlocation Manager . getLast Known Location ( Location Manager . NETWORK _ PROVIDER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Ġ!= Ġnull Ġ|| Ġlocation 2 Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æµĭ æĺ¯åĲ¦ æľī çĽ¸ æľº æĿĥéĻĲ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck Camera Un reli able (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcamera : ĠCamera ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Ġ= ĠCamera . open () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamera . release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æµĭ æĺ¯åĲ¦ æľī å½ķ éŁ³ æĿĥéĻĲ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck Record Un reli able (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġaudio Record : ĠAudio Record ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval ĠbufferSize InBytes Ġ= ĠAudio Record . getMin BufferSize ( AUDIO _ SAMPLE _ RATE , ĠA UDIO _ CHANNEL , ĠA UDIO _ ENCODING ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Record Ġ= ĠAudio Record ( AUDIO _ INPUT , ĠA UDIO _ SAMPLE _ RATE , ĠA UDIO _ CHANNEL , ĠA UDIO _ ENCODING , ĠbufferSize InBytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Record Ġ!= Ġnull Ġ&& Ġaudio Record . state Ġ== ĠAudio Record . STATE _ INITIAL IZED ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( audio Record Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Record . release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æµĭ æĺ¯åĲ¦ æľī è¯»åıĸ è®¾å¤ĩ ä¿¡æģ¯ æĿĥéĻĲ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck Read Phone Un reli able ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtm Ġ= Ġcontext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getSystem Service ( Context . TELE PHONY _ SERVICE ) Ġas ĠTele phony Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") Ġval Ġ ime i Ġ= Ġtm . deviceId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! TextUtils . isEmpty ( ime i ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æµĭ æĺ¯åĲ¦ æľī è¯»åıĸ èģĶç³» äºº æĿĥéĻĲ ï¼Į ä¸įåı¯ éĿ ł ãĢĤ åľ¨ èģĶç³» äºº åĪĹè¡¨ ä¸ºç©º æĹ¶ ï¼Į åį³ ä½¿ èµĭ äºĪ äºĨ è¯»åıĸ æĿĥéĻĲ ä¹Ł ä¼ļ æĬ¥ æ²¡ æĿĥéĻĲ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck Read Contact Un reli able ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcursor : ĠCursor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor Ġ= Ġcontext . content Resolver . query ( Contacts Contract . Common Data Kinds . Phone . CONTENT _ URI , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor ?. close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }