package Ġcom . example . fragment . project . service Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content .* Ċ import Ġandroid . hardware . display . Display Manager Ċ import Ġandroid . hardware . display . Virtual Display Ċ import Ġandroid . media . Media Recorder Ċ import Ġandroid . media . projection . Media Projection Ċ import Ġandroid . media . projection . Media Projection Manager Ċ import Ġandroid . os .* Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġcom . example . fragment . library . base . utils . Metrics Utils Ċ import Ġjava . io . File Ċ Ċ class ĠScreen Record Service Ġ: ĠService () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind Service ( context : ĠContext , Ġconnection : ĠService Connection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . bind Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( context , ĠScreen Record Service :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext . BIND _ AUTO _ CREATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġun bind Service ( context : ĠContext , Ġconnection : ĠService Connection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . unbind Service ( connection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġmedia Recorder : ĠMedia Recorder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġmedia Projection : ĠMedia Projection ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġvirtual Display : ĠVirtual Display ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġis Running Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ?): ĠI Binder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠScreen Record Binder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġclear Record () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Record ( result Code : ĠInt , Ġresult Data : ĠIntent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Running Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder Ġ= ĠMedia Recorder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Media Projection Manager çĶ³è¯· æĿĥéĻĲ Ġ ĠMedia Projection èİ·åıĸ çĶ³è¯· ç»ĵæŀľ , éĺ² æŃ¢ åĪ« äºº è°ĥ åıĸ éļĲ ç§ģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprojection Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . MEDIA _ PRO JECTION _ SERVICE ) Ġas ĠMedia Projection Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Projection Ġ= Ġprojection Manager . get Media Projection ( result Code , Ġresult Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® éŁ³ é¢ĳ æºĲ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. set Audio Source ( Media Recorder . Audio Source . MIC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® è§Ĩé¢ĳ æºĲ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. set Video Source ( Media Recorder . Video Source . SURFACE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® è¾ĵåĩº çļĦ ç¼ĸçłģ æł¼å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. setOutput Format ( Media Recorder . Output Format . M PEG _ 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Path Ġ= Ġget External Files Dir ( Environment . DIRECTORY _ MO VI ES )?. absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcache Dir . absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecord Path Ġ= Ġmovies Path Ġ+ ĠFile . separator Ġ+ ĠSystem . currentTimeMillis () Ġ+ Ġ". mp 4 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. setOutput File ( record Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® å½ķ å±ı æĹ¶ å±ı å¹ķ å¤§å°ı , è¿Ļä¸ª åı¯ è·Ł m Virtual Display Ġä¸Ģ èµ· æİ§åĪ¶ å±ı å¹ķ å¤§å°ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// virtual Display Ġæĺ¯ å°Ĩ å±ı å¹ķ è®¾ç½® æĪĲ å¤ļ å¤§ å¤ļ å°ı ï¼Į set Video Size æĺ¯ è¾ĵåĩº æĸĩä»¶ æĹ¶ å±ı å¹ķ å¤ļ å¤§ å¤ļ å°ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. set Video Size ( Metrics Utils . screen Width , ĠMetrics Utils . screen Height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// éŁ³ é¢ĳ ç¼ĸçłģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. set Audio Encoder ( Media Recorder . Audio Encoder . AM R _ NB ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĽ¾åĥı ç¼ĸçłģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. set Video Encoder ( Media Recorder . Video Encoder . H 2 6 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbit Rate Ġ= ĠMetrics Utils . screen Width Ġ* ĠMetrics Utils . screen Height Ġ* Ġ 2 . 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® çłģ çİĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. set Video Encoding Bit Rate ( bit Rate . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// è®¾ç½® å¸ § çİĩ ï¼Į è¯¥ å¸ § çİĩ å¿ħé¡» æĺ¯ ç¡¬ ä»¶ æĶ¯æĮģ çļĦ ï¼Į åı¯ä»¥éĢļè¿ĩ Camera . Camera Parameter . get Supported Preview F ps Range () æĸ¹æ³ķ èİ·åıĸ çĽ¸ æľº æĶ¯æĮģ çļĦ å¸ § çİĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. set Video Frame Rate ( 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. prepare () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ å½ķ åĪ¶ å±ı å¹ķ çļĦ å¤§å°ı , åĥı ç´ł , çŃī çŃī ä¸ĢäºĽ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvirtual Display Ġ= Ġmedia Projection ?. create Virtual Display ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Screen ĠRecord ĠService ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMetrics Utils . screen Width , ĠMetrics Utils . screen Height , ĠMetrics Utils . density D pi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDisplay Manager . VIRTUAL _ DISPLAY _ FLAG _ AUTO _ MIR ROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. surface , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. start () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresume Record () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpause Record () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. pause () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Record (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isRunning ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Running Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Recorder ?. stop () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Record () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Record () Ġ{ ĊĠĠĠĠĠĠĠ Ġmedia Recorder ?. reset () ĊĠĠĠĠĠĠĠ Ġmedia Recorder ?. release () ĊĠĠĠĠĠĠĠ Ġvirtual Display ?. release () ĊĠĠĠĠĠĠĠ Ġmedia Projection ?. stop () ĊĠĠĠĠĠĠĠ Ġmedia Recorder Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvirtual Display Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġmedia Projection Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠScreen Record Binder Ġ: ĠB inder () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġstart Record ( result Code : ĠInt , Ġresult Data : ĠIntent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Screen Record Service . start Record ( result Code , Ġresult Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġresume Record () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Screen Record Service . resume Record () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpause Record () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Screen Record Service . pause Record () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġstop Record (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis @ Screen Record Service . stop Record () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }