package Ġcom . open . a qr le i . ipc Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . os .* Ċ import Ġandroid . text . method . Scrolling Movement Method Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . open . a qr le i . ipc . content provider . Order Provider Ċ import Ġcom . open . a qr le i . ipc . file . FileStream Util Ċ import Ġcom . open . a qr le i . ipc . file . User Ċ import Ġkotlinx . android . synt hetic . main . activity _ ipc .* Ċ import Ġjava . io .* Ċ import Ġjava . lang . ref . Weak Reference Ċ import Ġjava . net . Socket Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Executors Ċ import Ġkotlin . concurrent . thread ĊĊ Ċ /** Ċ Ġ* Ġ@ author Ġ Ġa qr Le i Ġon Ġ 2 0 1 8 / 7 / 2 0 Ċ Ġ*/ Ċ class ĠIPC Activity Ġ: ĠAppCompatActivity (), ĠView . OnClickListener Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRE CE IVE _ FROM _ SERVICE _ CODE _ INIT Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRE CE IVE _ FROM _ SERVICE _ CODE _ NORMAL Ġ= Ġ 1 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOCAL _ SOCKET _ CONNECTED Ġ= Ġ 2 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠLOCAL _ SOCKET _ SEND _ MESSAGE Ġ= Ġ 2 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRE CE IVE _ FROM _ SERVICE _ CODE _ FILE Ġ= Ġ 1 1 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRE CE IVE _ FROM _ SERVICE _ DATA Ġ= Ġ" receive Data From Service " ĊĠĠĠĠĠĠĠ Ġfun Ġstart ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠIPC Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query Activities ( context , Ġintent )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm Binder : ĠI Binder Pool ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġclient Messenger Handler : ĠClient Messenger Handler ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClient Messenger Handler ( Weak Reference ( this )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġlistener Manager : ĠI Listener Manager ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġchange Listener : ĠI ChangeListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠI ChangeListener . Stub () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmsg Change ( info : ĠInfo ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġ"${ it . data }- $ time " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset First Content Text ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġm Con : ĠService Connection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name ?, Ġservice : ĠI Binder ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binder Ġ= ĠI Binder Pool . Stub . as Interface ( service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® æŃ» äº ¡ çĽĳåĲ¬ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice ?. link To Death ( m Death Recipient , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binder ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Messenger Handler . service Ġ= ĠMess enger ( it . query Binder ( IPC Service . MESS EN GER _ BIND ER _ CODE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Msg Init ( client Messenger Handler . service !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Manager Ġ= ĠI Listener Manager . Stub . as Interface ( it . query Binder ( IPC Service . A IDL _ BIND ER _ CODE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Manager ?. register ChangeListener ( change Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ?) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġm Death Recipient Ġ= Ġobject Ġ: ĠI Binder . Death Recipient Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ è¿ľç¨ĭ æľįåĬ¡ ç«¯ çĶ±äºİ æŁĲ ç§į åİŁåĽł ç»Ī æŃ¢ ï¼Į æŃ¤ æĹ¶ Binder " æŃ» äº ¡ ", å½ĵ Binder æŃ» äº ¡ æĹ¶ ï¼Į ĊĠĠĠĠĠĠĠĠ Ġ* Ġä¼ļ åĽŀè°ĥ æŃ¤ æĸ¹æ³ķ ï¼Į åľ¨ æŃ¤ å¤Ħ è°ĥçĶ¨ unlink To Death ä¸Ķ å°Ĩ Binder ç½® ä¸º NULL , ĊĠĠĠĠĠĠĠĠ Ġ* Ġ å¹¶ éĩįæĸ° ç»ĳå®ļ æľįåĬ¡ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbinder Di ed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binder ?. as Binder ()?. unlink To Death ( this , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binder Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbind Service ( intent , Ġm Con , ĠService . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ ipc ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠIPC Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġbind Service ( intent , Ġm Con , ĠService . BIND _ AUTO _ CREATE ) ĊĠĠĠĠĠĠĠ Ġset Listener () ĊĠĠĠĠĠĠĠ Ġfirst Content Tv . movement Method Ġ= ĠScroll ing Movement Method . getInstance () ĊĠĠĠĠĠĠĠ Ġfile Ġ= ĠFile Stream Util . getCache File ( this ) ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnect Tcp Server () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġobject File Ġ= ĠFile Stream Util . getObject File ( this ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġun Bind Service Tv . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġsocket Tv . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġfile Test Tv . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġcontent Provider Tv . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġcontent Provider Tv . isEnabled Ġ= Ġfalse ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtime : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠSimpleDateFormat (" hh : mm : ss . SS S ", ĠLocale . ROOT ). format ( System . currentTimeMillis ()) ĊĠĠĠ Ġprivate Ġval Ġthread Pool Ġ= ĠExec utors . new Single Thread Executor () ĊĠĠĠ Ġprivate Ġvar Ġfile : ĠFile ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġobject File : ĠFile ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v ?. id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . file Test Tv Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġ" Write Ġby ĠClient -$ time " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Stream Util . write Char ( it , Ġstr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Stream Util . write Object ( object File , ĠUser (" Client ", Ġtime )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Messenger Handler . service ?. let Ġ{ Ġservice Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify File Change ( service ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . un Bind Service Tv Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun bind Service ( m Con ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Messenger Handler . service Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . socket Tv Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Pool . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm PrintWriter ?. println (" Hello ĠSocket :$ time ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . content Provider Tv Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . insert ( Order Provider . ORDER _ URL , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Messenger Handler . service ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Msg Normal ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset Second Content Text ( bundle : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsecond Content Tv . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġsecond Content Tv . append ( bundle . getString ( RECEIVE _ FROM _ SERVICE _ DATA )) ĊĠĠĠĠĠĠĠ Ġsecond Content Tv . append ("\ n ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġset First Content Text ( str : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfirst Content Tv . append ( str ) ĊĠĠĠĠĠĠĠ Ġfirst Content Tv . append ("\ n ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreceive File Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġfile ?. let Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Stream Util . read Char ( file ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset First Content Text (" File : Ġ$ it -$ time ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Stream Util . read Object ( object File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset First Content Text (" User : Ġ${ it ?. name }-${ it ?. time }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Msg Normal ( service : ĠMess enger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . send ( Message . obtain ( null , ĠIPC Service . RECEIVE _ FROM _ CLIENT _ CODE _ NORMAL )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnotify File Change ( service : ĠMess enger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . send ( Message . obtain ( null , ĠIPC Service . RECEIVE _ FROM _ CLIENT _ CODE _ FILE )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Msg Init ( service : ĠMess enger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMessage . obtain ( null , ĠIPC Service . RECEIVE _ FROM _ CLIENT _ CODE _ INIT ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreply To Ġ= ĠMess enger ( client Messenger Handler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġvar Ġm Client Socket : ĠSocket ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm PrintWriter : ĠPrintWriter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġfun Ġconnect Tcp Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsocket : ĠSocket ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwhile Ġ( socket Ġ== Ġnull ) Ġ{ Ġ Ġ// Ġ è¿ŀæİ¥ å¤±è´¥ çļĦè¯Ŀ ï¼Į æ¯ı éļĶ 1 ç§Ĵ éĩį è¿ŀ ä¸Ģæ¬¡ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// è¿ŀæİ¥ åĪ° æľ¬åľ° ç«¯åı£ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsocket Ġ= ĠSocket (" localhost ", Ġ 9 9 9 9 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Client Socket Ġ= Ġsocket ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çĶ¨äºİ åĲĳ æľįåĬ¡ ç«¯ åĨĻåħ¥ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm PrintWriter Ġ= ĠPrintWriter ( Buffered Writer ( OutputStream Writer ( socket . get OutputStream ())), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĢļè¿ĩ Handler éĢļçŁ¥ Socket è¿ŀæİ¥ æĪĲåĬŁ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Messenger Handler . send Empty Message ( LOCAL _ SOCKET _ CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ æľįåĬ¡ ç«¯ åıĳéĢģ çļĦæķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBufferedReader ( InputStream Reader ( socket . getInputStream ())). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! this . is Finish ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmsg Ġ= Ġit . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! msg . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġ"$ msg -$ time " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĢļè¿ĩ Handler å°Ĩ æķ°æį® åıĳéĢģ åĪ° UI çº¿ç¨ĭ å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient Messenger Handler . obtain Message ( LOCAL _ SOCKET _ SEND _ MESSAGE , Ġmsg ). send To Target () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Client Socket Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm PrintWriter ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Client Socket ?. shutdown Input () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Client Socket ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠClient Messenger Handler ( private Ġval Ġactivity : ĠWeak Reference < IPC Activity >) Ġ: ĠHandler ( Looper . get Main Looper ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġservice : ĠMess enger ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Message ( msg : ĠMessage ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( msg ?. what ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRE CE IVE _ FROM _ SERVICE _ CODE _ INIT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get ()?. send Msg Normal ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRE CE IVE _ FROM _ SERVICE _ CODE _ NORMAL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get ()?. set Second Content Text ( msg . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRE CE IVE _ FROM _ SERVICE _ CODE _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get ()?. receive File Change () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOCAL _ SOCKET _ CONNECTED Ġ-> Ġ{ Ġ// Ġsocket Ġ è¿ŀæİ¥ åĪĽå»º å®Į æ¯ķ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get ()?. content Provider Tv ?. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOCAL _ SOCKET _ SEND _ MESSAGE Ġ-> Ġ{ Ġ// Ġsocket Ġ åĽŀ ä¼ł ä¿¡æģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSimpleDateFormat (" hh : mm : ss . SS S ", ĠLocale . ROOT ). format ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ( msg . obj ?. toString () Ġ?: Ġ" Empty ") Ġ+ Ġ"- $ time " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . get ()?. set First Content Text ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . handle Message ( msg ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }