package Ġcom . android . shot z _ pro _ io . stream Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . media . projection . Media Projection Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Settings Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . android . shot z _ pro _ io . R Ċ import Ġcom . google . api . client . googleapis . extensions . android . gms . auth . Google Account Credential Ċ Ċ class ĠStreaming Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠSCREEN _ CAPTURE _ CODE Ġ= Ġ 2 0 1 ĊĊĠĠĠ Ġprivate Ġvar Ġm Screen Capture Intent : ĠIntent ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġn Screen Capture ResultCode : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġr tmp Url : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġvar Ġbroad Cast Id : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ streaming ) ĊĠĠĠĠĠĠĠ Ġintent ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr tmp Url Ġ= Ġit . getString Extra ( Y outube Api . RT MP _ URL _ KEY ) Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbroad Cast Id Ġ= Ġit . getString Extra ( Y outube Api . BRO ADCAST _ ID _ KEY ) Ġas ĠString ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequest Screen Capture Intent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠSCREEN _ CAPTURE _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ!= ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Screen Capture Intent Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Screen Capture Intent ?. putExtra (" SCREEN _ CAPTURE _ INT ENT _ RESULT _ CODE ", ĠresultCode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn Screen Capture ResultCode Ġ= ĠresultCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġruntime Permission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Stream Controller Serv ie () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstreaming Controller Service Ġ= ĠIntent ( this , ĠStreaming Controller Service () :: class . java ) ĊĠĠĠĠĠĠĠ Ġstreaming Controller Service . action Ġ= Ġ" Camera _ Available " ĊĊĠĠĠĠĠĠĠ Ġstreaming Controller Service . putExtra ( Intent . EXTRA _ INT ENT , Ġm Screen Capture Intent ) ĊĠĠĠĠĠĠĠ Ġstreaming Controller Service . putExtra ( Y outube Api . RT MP _ URL _ KEY , Ġr tmp Url ) ĊĠĠĠĠĠĠĠ Ġstreaming Controller Service . putExtra ( Y outube Api . BRO ADCAST _ ID _ KEY , Ġbroad Cast Id ) ĊĠĠĠĠĠĠĠ Ġstart Service ( streaming Controller Service ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Screen Capture Intent () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Screen Capture Intent Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Projection Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget System Service ( Context . MEDIA _ PRO JECTION _ SERVICE ) Ġas ĠMedia Projection Manager ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Projection Manager . create Screen Capture Intent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSCREEN _ CAPTURE _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġruntime Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Settings . can Draw Overlay s ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmy Intent Ġ= ĠIntent ( Settings . ACTION _ MANAGE _ OVER LAY _ PERMISSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( my Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Stream Controller Serv ie () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Stream Controller Serv ie () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Camera Feature ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . package Manager . has System Feature ( CAMERA _ SERVICE ) ĊĠĠĠ Ġ} Ċ }