package Ġcom . ad rena . k mp . upload Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . widget . Button Ċ import Ġandroidx . core . content . File Provider Ċ import Ġpermissions . dispatcher . Needs Permission Ċ import Ġpermissions . dispatcher . Runtime Permissions Ċ Ċ @ Runtime Permissions Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ IMAGE _ CAPTURE Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm Camera Uri : ĠUri ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġget External Files Dir ( Environment . DIRECTORY _ PI CTURE S )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . delete Dir ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġshow Camera With Permission Check () ĊĊĠĠĠĠĠĠĠ ĠfindViewById < Button >( R . id . button ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Camera With Permission Check () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Needs Permission ( Manifest . permission . CAMERA , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠ Ġfun Ġshow Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġcreate Uri Provider () ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Media Store . ACTION _ IMAGE _ CAPTURE ) ĊĊĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ GRANT _ WRITE _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġuri ) ĊĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠREQUEST _ IMAGE _ CAPTURE ) ĊĊĠĠĠĠĠĠĠ Ġm Camera Uri Ġ= Ġuri ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĊĠĠĠĠĠĠĠ Ġon Request Permissions Result ( request Code , Ġgrant Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġm Camera Uri ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ IMAGE _ CAPTURE Ġ&& ĠresultCode Ġ== ĠActivity . RESULT _ OK Ġ&& Ġuri Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠResult Activity :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Result Activity . URI , Ġm Camera Uri ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Uri Provider ( directory : ĠString ? Ġ= Ġnull ): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Provider Ġ= Ġ"$ packageName . files " ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠFileUtils . create File ( this , Ġdirectory ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( path Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFile Provider . get Uri For File ( this , Ġfile Provider , Ġpath ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } ĊĊ