package Ġcom . li vet yp ing . activity binder Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . li vet yp ing . permission . Permission Binder Ċ import Ġkotlinx . android . synt hetic . main . activity _ permissions .* ĊĊ Ċ class ĠPermission Example Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ SINGLE Ġ= Ġ" single " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG _ MULTI PLY Ġ= Ġ" multiply " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpermission Binder : ĠPermission Binder ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ permissions ) ĊĠĠĠĠĠĠĠ Ġpermission Binder Ġ= Ġ( application Ġas ĠB inder Example Application ). permission Binder ĊĠĠĠĠĠĠĠ Ġhandle Button Single Permissions () ĊĠĠĠĠĠĠĠ Ġhandle Button Multiply Permissions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Button Multiply Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġmultiply _ passive . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Binder . passive Permission ( listOf ( Manifest . permission . READ _ CONTACT S , ĠManifest . permission . ACCESS _ F INE _ LOCATION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( permission , Ġis Granted ) Ġin Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Output Results ( is Granted , ĠTAG _ MULTI PLY , Ġpermission ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġr ationale Text Ġ= ĠgetString ( R . string . active _ permission _ ration ale _ text ) ĊĠĠĠĠĠĠĠ Ġ// cab Ġbe Ġplaced Ġin Ġactive Ġpermission Ġmethod Ġas Ġthird Ġparameter ĊĠĠĠĠĠĠĠ Ġval Ġsettings ButtonText Ġ= ĠgetString ( R . string . active _ permission _ ration ale _ button _ text ) ĊĠĠĠĠĠĠĠ Ġmultiply _ active . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Binder . active Permission ( listOf ( Manifest . permission . SEND _ SMS , ĠManifest . permission . RECORD _ AUDIO ), Ġr ationale Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( permission , Ġis Granted ) Ġin Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Output Results ( is Granted , ĠTAG _ MULTI PLY , Ġpermission ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmultiply _ global . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Binder . global Permission ( listOf ( Manifest . permission . BODY _ S ENS ORS , ĠManifest . permission . READ _ CAL END AR ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShow Global Explanation Activity :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( permission , Ġis Granted ) Ġin Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Output Results ( is Granted , ĠTAG _ MULTI PLY , Ġpermission ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Button Single Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġsingle _ passive . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Binder . passive Permission ( Manifest . permission . READ _ EXTERNAL _ STORAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Output Results ( it , ĠTAG _ SINGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġr ationale Text Ġ= ĠgetString ( R . string . active _ permission _ ration ale _ text ) ĊĠĠĠĠĠĠĠ Ġ// cab Ġbe Ġplaced Ġin Ġactive Ġpermission Ġmethod Ġas Ġthird Ġparameter ĊĠĠĠĠĠĠĠ Ġval Ġsettings ButtonText Ġ= ĠgetString ( R . string . active _ permission _ ration ale _ button _ text ) ĊĠĠĠĠĠĠĠ Ġsingle _ active . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Binder . active Permission ( Manifest . permission . CAMERA , Ġr ationale Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Output Results ( it , ĠTAG _ SINGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsingle _ global . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Binder . global Permission ( Manifest . permission . USE _ S IP , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShow Global Explanation Activity :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Output Results ( it , ĠTAG _ SINGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Output Results ( is Granted : ĠBoolean , Ġtag : ĠString , Ġpermission : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Granted ) Ġgranted ( tag , Ġpermission ) Ġelse Ġdenied ( tag , Ġpermission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġpermission Binder . attach ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġpermission Binder . detach ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġpermission Binder . on Activity Result ( request Code , Ġdata , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġpermission Binder . on Request Permission Result ( request Code , Ġgrant Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgranted ( tag : ĠString , Ġpermission : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( tag , Ġ"$ permission Ġwas Ġgranted ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdenied ( tag : ĠString , Ġpermission : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( tag , Ġ"$ permission Ġwas Ġdenied ") ĊĠĠĠ Ġ} Ċ } Ċ