package Ġcom . p mm . silent update . core Ċ Ċ import Ġandroid . app . Download Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Environment Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠAuthor : ä½ł éľĢè¦ģ ä¸Ģ åı° æ°¸ åĬ¨ æľº Ċ Ġ* ĠDate : 2 0 1 9 - 0 8 - 1 5 Ġ 1 8 : 3 0 Ċ Ġ* ĠDescription : Ċ Ġ*/ Ċ internal Ġobject ĠDown Load Center Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdownload Manager : ĠDownload Manager Ġby Ġlazy Ġ{ ĠContext Center . get AppContext (). getSystem Service ( Context . DOWNLOAD _ SERVICE ) Ġas ĠDownload Manager Ġ} ĊĠĠĠ Ġprivate Ġval Ġapp Update Receiver : ĠApp Update Receiver Ġby Ġlazy Ġ{ ĠApp Update Receiver () Ġ} ĊĠĠĠ Ġvar Ġon Download Complete : Ġ(( uri : ĠUri ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ// æĽ´æĸ° apk ĠW ifi & Mobile ĊĠĠĠ Ġinternal Ġfun Ġadd Request ( apk Url : ĠString , ĠfileName : ĠString , Ġis Mobile Mode : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbind Receiver () Ġ// ç»ĳå®ļ å¹¿ æĴŃ æİ¥æĶ¶ èĢħ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse ( apk Url ) ĊĠĠĠĠĠĠĠ Ġlo ge (" url =$ apk Url ") ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠDownload Manager . Request ( uri ) ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® åľ¨ ä»Ģä¹Ī ç½ĳç»ľ æĥħåĨµä¸ĭ è¿Ľè¡Į ä¸ĭè½½ ĊĠĠĠĠĠĠĠ Ġrequest . set Allowed Network Types ( if Ġ( is Mobile Mode ) ĠDownload Manager . Request . NETWORK _ MOB ILE Ġelse ĠDownload Manager . Request . NETWORK _ WIFI ) ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® éĢļçŁ¥ æłı æłĩé¢ĺ ĊĠĠĠĠĠĠĠ Ġrequest . set Notification Visibility ( if Ġ( is Mobile Mode ) ĠDownload Manager . Request . VIS IBILITY _ VISIBLE Ġelse ĠDownload Manager . Request . VIS IBILITY _ HIDDEN ) ĊĠĠĠĠĠĠĠ Ġrequest . setTitle ( fileName ) ĊĠĠĠĠĠĠĠ Ġrequest . setDescription ( Context Center . get AppContext (). packageName ) ĊĠĠĠĠĠĠĠ Ġrequest . set Allowed Over Roaming ( false ) ĊĠĠĠĠĠĠĠ Ġrequest . setVisible In Downloads Ui ( true ) ĊĠĠĠĠĠĠĠ Ġ// è®¾ç½® æĸĩä»¶ åŃĺ æĶ¾ çĽ®å½ķ ĊĠĠĠĠĠĠĠ Ġ// request . set Destination In External Files Dir ( AppData . getContext (), Ġ" download ", Ġ" you udo _ v " Ġ+ Ġversion Ġ+ Ġ". apk "); ĊĠĠĠĠĠĠĠ Ġrequest . set Destination In External Public Dir ( Environment . DIRECTORY _ DOWNLOAD S , ĠfileName ) ĊĊĠĠĠĠĠĠĠ Ġval Ġid : ĠLong ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġdownload Manager . enqueue ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åŃĺ åħ¥ åĪ° share éĩĮ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS PC enter . set Download TaskId ( fileName , Ġid ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// e . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// æŁ¥è¯¢ ä»»åĬ¡ çļĦ çĬ¶ ä½ĵ ĊĠĠĠ Ġprivate Ġfun Ġquery Task Status ( id : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠDownload Manager . Query () ĊĠĠĠĠĠĠĠ Ġquery . set Filter ById ( id ) ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdownload Manager . query ( query ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ TITLE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ LOCAL _ URI )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo ge (" id Ġ= Ġ$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo ge (" title Ġ= Ġ$ title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlo ge (" uri Ġ= Ġ$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ STATUS )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ä¸ĭè½½ ä»»åĬ¡ æĺ¯åĲ¦ ç»ĵæĿŁ ĊĠĠĠ Ġinternal Ġfun Ġis Down Task Processing ( id : ĠLong ) Ġ= Ġquery Task Status ( id ) Ġ== Ġ" 1 9 2 " ĊĊĠĠĠ Ġ// ä¸ĭè½½ ä»»åĬ¡ æĺ¯åĲ¦ æļĤ åģľ ĊĠĠĠ Ġinternal Ġfun Ġis Down Task Pause ( id : ĠLong ) Ġ= Ġquery Task Status ( id ) Ġ== Ġ" 1 9 3 " ĊĊĠĠĠ Ġ// ä¸ĭè½½ ä»»åĬ¡ æĺ¯åĲ¦ æĪĲåĬŁ ĊĠĠĠ Ġinternal Ġfun Ġis Down Task Success ( id : ĠLong ) Ġ= Ġquery Task Status ( id ) Ġ== Ġ" 2 0 0 " ĊĊĊĠĠĠ Ġ// éĢļè¿ĩ ä¸ĭè½½ id èİ·åıĸ Ġæĸĩä»¶ åľ°åĿĢ ĊĠĠĠ Ġprivate Ġfun Ġget FilePath By TaskId ( id : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠfilePath Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠDownload Manager . Query () ĊĠĠĠĠĠĠĠ Ġquery . set Filter ById ( id ) ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdownload Manager . query ( query ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfilePath Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ LOCAL _ URI )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠ Ġreturn ĠfilePath ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// éĢļè¿ĩ ä¸ĭè½½ id èİ·åıĸ Ġæĸĩä»¶ åľ°åĿĢ ĊĠĠĠ Ġinternal Ġfun ĠgetFile Uri By TaskId ( id : ĠLong ): ĠUri ? Ġ= Ġdownload Manager . get Uri For Downloaded File ( id ) ĊĊĠĠĠ Ġ// ä¸ĭè½½ å®ĮæĪĲ ĊĠĠĠ Ġprivate Ġfun Ġdownload Complete ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo ge (" ä¸ĭè½½ å®ĮæĪĲ ") ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġintent . getLong Extra ( Download Manager . EXTRA _ DOWNLOAD _ ID , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ ID æĺ¯åĲ¦ ä¸Ģèĩ´ ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= ĠS PC enter . get Download TaskId ( SP Center . key )) Ġreturn ĊĠĠĠĠĠĠĠ Ġlo ge (" æ³¨ éĶĢ æİ¥æĶ¶ èĢħ ") ĊĠĠĠĠĠĠĠ Ġun bind Receiver () // æ³¨ éĶĢ æİ¥æĶ¶ èĢħ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠgetFile Uri By TaskId ( id ) Ġ?: Ġreturn Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri . is nu ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlo ge (" ä¸ĭè½½ äºĨ æĹł æķĪ æĸĩä»¶ ï¼Į è¯· ç¡®å®ļ url æĺ¯åĲ¦ åı¯ä»¥ æĪĲåĬŁ è¯·æ±Ĥ ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// å¿ħé¡» try - catch Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( URI ( uri )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Download Complete ?. invoke ( uri ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// éĢļè¿ĩ ä¸ĭè½½ id Ġ æī¾åĪ° å¯¹åºĶçļĦ æĸĩä»¶ åľ°åĿĢ ĊĠĠĠ Ġ@ Deprecated (" æŁ¥è¯¢ ä¸ĭè½½ ä»»åĬ¡ çļĦ çĬ¶æĢģ ") ĊĠĠĠ Ġprivate Ġfun Ġquery Down Task ById ( id : ĠLong ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠfilePath : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠDownload Manager . Query () ĊĊĠĠĠĠĠĠĠ Ġquery . set Filter ById ( id ) ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdownload Manager . query ( query ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdown Id Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ TITLE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ LOCAL _ URI )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfilePath Ġ= Ġaddress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ STATUS )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ BYTES _ DOWN LOADED _ SO _ FAR )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Total Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Download Manager . COLUMN _ TOTAL _ SIZE _ BYTES )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠ Ġreturn ĠfilePath ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ç»ĳå®ļ å¹¿ æĴŃ æİ¥æĶ¶ èĢħ ĊĠĠĠ Ġprivate Ġfun Ġbind Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// å¹¿ æĴŃ æİ¥æĶ¶ èĢħ ĊĠĠĠĠĠĠĠ Ġapp Update Receiver . on Download Complete Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Complete ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġfilter . addAction (" android . intent . action . DOWNLOAD _ COMPLETE ") ĊĠĠĠĠĠĠĠ Ġfilter . addAction (" android . intent . action . VIEW _ DOWNLOAD S ") ĊĠĠĠĠĠĠĠ ĠContext Center . get AppContext (). register Receiver ( app Update Receiver , Ġfilter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// åıĸæ¶Ī ç»ĳå®ļ å¹¿ æĴŃ æİ¥æĶ¶ èĢħ ĊĠĠĠ Ġinternal Ġfun Ġun bind Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Center . get AppContext (). unregister Receiver ( app Update Receiver ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// nothing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }