package Ġcom . ad ity as ub ath u . simp lem usic player Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . media . Audio Focus Request Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . os . Binder Ċ import Ġandroid . os . IB inder Ċ import Ġjava . io . IOException Ċ import Ġandroid . media . Audio Attributes Ċ import Ġandroid . os . Build ĊĊ Ċ class ĠBackground Audio Service Ġ: ĠService (), ĠMedia Player . On Completion Listener , ĠMedia Player . On Prepared Listener , ĠMedia Player . OnError Listener , ĠMedia Player . On Seek Complete Listener , ĊĠĠĠĠĠĠĠ ĠMedia Player . On Info Listener , ĠAudio Manager . On Audio Focus ChangeListener Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġplayer : ĠMedia Player ĊĠĠĠ Ġval Ġi Binder : ĠI Binder Ġ= ĠLocal Binder () ĊĊĠĠĠ Ġlateinit Ġvar Ġmedia File : ĠString ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠI Binder ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// media File Ġ= Ġintent . getString Extra () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġi Binder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Completion ( mp : ĠMedia Player ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepared ( mp : ĠMedia Player ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( mp : ĠMedia Player ?, Ġwhat : ĠInt , Ġextra : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Seek Complete ( mp : ĠMedia Player ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Info ( mp : ĠMedia Player ?, Ġwhat : ĠInt , Ġextra : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Audio Focus Change ( focus Change : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTODO (" not Ġimplemented ") Ġ// To Ġchange Ġbody Ġof Ġcreated Ġfunctions Ġuse ĠFile Ġ| ĠSettings Ġ| ĠFile ĠTemplates . ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠLocal Binder Ġ: ĠB inder () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Service (): ĠBackground Audio Service Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Background Audio Service ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit MediaPlayer () Ġ{ ĊĠĠĠĠĠĠĠ Ġplayer Ġ= ĠMedia Player () ĊĠĠĠĠĠĠĠ Ġ// Set Ġup ĠMedia Player Ġevent Ġlisteners ĊĠĠĠĠĠĠĠ Ġplayer . setOn Completion Listener ( this ) ĊĠĠĠĠĠĠĠ Ġplayer . setOn Error Listener ( this ) ĊĠĠĠĠĠĠĠ Ġplayer . setOn Prepared Listener ( this ) ĊĠĠĠĠĠĠĠ Ġplayer . setOn Seek Complete Listener ( this ) ĊĠĠĠĠĠĠĠ Ġplayer . setOn Info Listener ( this ) ĊĠĠĠĠĠĠĠ Ġ// player Ġso Ġthat Ġthe ĠMedia Player Ġis Ġnot Ġpointing Ġto Ġanother Ġdata Ġsource ĊĠĠĠĠĠĠĠ Ġplayer . reset () ĊĊĠĠĠĠĠĠĠ Ġval Ġm Audio Manager Ġ= Ġget System Service ( Context . AUDIO _ SERVICE ) ĊĊĠĠĠĠĠĠĠ Ġval Ġm Playback Attributes Ġ= ĠAudio Attributes . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Usage ( Audio Attributes . USAGE _ GAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ContentType ( Audio Attributes . CONTENT _ TYPE _ M US IC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Focus Request : ĠAudio Focus Request Ġ= ĠAudio Focus Request . Builder ( Audio Manager . AUDIO FOCUS _ GAIN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Audio Attributes ( m Playback Attributes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Accept s Delayed Focus Gain ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Audio Focus ChangeListener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . set Audio Stream Type ( Audio Manager . STREAM _ M US IC ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġdata Ġsource Ġto Ġthe Ġmedia File Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . set DataSource ( media File ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Self () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġplayer . prepare Async () ĊĠĠĠ Ġ} ĊĊ Ċ }