package Ġcom . example . scoped storage demo Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Recover able Security Exception Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjava . io . Buffered InputStream Ċ import Ġjava . io . Buffered OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ import Ġkotlin . concurrent . thread Ċ Ċ const Ġval ĠP ICK _ FILE Ġ= Ġ 1 Ċ private Ġconst Ġval ĠREQUEST _ DELETE _ PERMISSION Ġ= Ġ 8 3 1 ; Ċ private Ġconst Ġval ĠREQUEST _ DELETE _ DOWNLOAD _ PERMISSION Ġ= Ġ 8 3 0 ; Ċ Ċ /** Ċ Ġ* Ġ@ author Ġy pk Ċ Ġ* ĠåĪĽå»º æĹ¥æľŁ ï¼ļ 2 0 2 0 / 1 2 / 1 2 ĠĠ 1 0 : 2 5 Ċ Ġ* Ġæı ı è¿° ï¼ļ Ċ Ġ*/ Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġval Ġpermissions To Require Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions To Require . add ( Manifest . permission . READ _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions To Require . add ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions To Require . add ( Manifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! permissions To Require . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġpermissions To Require . to Typed Array (), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbrowse Album . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠB rowse Album Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Image To Album . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Factory . decode Resource ( resources , ĠR . drawable . image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val ĠdisplayName Ġ= Ġ"${ System . currentTimeMillis ()}. jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val ĠdisplayName Ġ= Ġ" 2 0 2 0 1 1 3 0 yp k 6 6 6 7 . jpg " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠdisplayName Ġ= Ġ" 1 1 6 0 8 6 8 6 8 0 4 5 0 0 _ é» Ĵ æĿ¿ ãģª ãģĹ . jpg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠmimeType Ġ= Ġ" image / jpeg " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompress Format Ġ= ĠBitmap . Compress Format . JPEG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Bitmap To Album ( bitmap , ĠdisplayName , ĠmimeType , Ġcompress Format ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdelete Image To Album . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Image From Album (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdownload File . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Url Ġ= Ġ" http :// gu olin . tech / android . txt " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" android . txt " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload File ( file Url , ĠfileName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpick File . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpick File And Copy Uri To External Files Dir () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġimport Image To Down Load . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Image To Down Load (); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelete Image From Down Load . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Image From Down Load 2 (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdelete Image From Album () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage FileName Ġ= Ġ" 1 1 6 0 8 6 8 6 8 0 4 5 0 0 _ é» Ĵ æĿ¿ ãģª ãģĹ . jpg " ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Path Key Ġ= ĠMedia Store . Media Columns . DISPLAY _ NAME ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ query Path Key Ġ= ? Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( image FileName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" yp k Test ", Ġ" cursor Ġis Ġ"); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getLong ( cursor . getColumnIndex OrThrow ( Media Store . Images . Media ._ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent U ris . with App ended Id ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" yp k Test . delete Fil 1 1 e Ġuri =${ uri . toString () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Deal With ( uri ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" yp k Test ", Ġ" cursor Ġis Ġnull "); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġval Ġwhere Ġ= ĠMedia Store . Images . Media . DISPLAY _ NAME Ġ+ Ġ" ='" Ġ+ Ġimage FileName Ġ+ Ġ"'" ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æµĭè¯ķ åıĳçİ° ï¼Į åıªæľī æĺ¯ èĩªå·± åºĶçĶ¨ æıĴåħ¥ çļĦ åĽ¾çīĩ ï¼Į æīį åı¯ä»¥ åĪłéĻ¤ ãĢĤ åħ¶ä»ĸ åºĶçĶ¨ çļĦ Uri ï¼Į æĹłæ³ķ åĪłéĻ¤ ãĢĤ åį ¸ è½½ app åĲİ ï¼Į åĨį åİ» åĪłéĻ¤ åĽ¾çīĩ ï¼Į æŃ¤ æĸ¹æ³ķ ä¸įä¼ļ æĬĽ åĩº Security Exception å¼Ĥå¸¸ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontent Resolver . delete ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġwhere , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" yp k Test ", Ġ" delete Image From Album 1 Ġresult =${ result }"); ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġsu cess ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Environment . get External Storage Directory (). path }/${ Environment . DIRECTORY _ DC IM }/ $ image FileName "; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhere Ġ= ĠMedia Store . Images . Media . DATA Ġ+ Ġ" ='" Ġ+ ĠfilePath Ġ+ Ġ"'" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . delete ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġwhere , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" yp k Test ", Ġ" result =${ result }"); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġsu cess ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çŁ¥è¯Ĩ è¡¥ åħħ ï¼ļ ĊĠĠĠĠ Ġ* Ġ å¼Ģ äºĨ æ² Ļ ç®± ä¹ĭåĲİ ï¼Į ä¹ĭåīį çļĦ åªĴ ä½ĵ åºĵ çĶŁæĪĲ çļĦæĸĩä»¶ åľ¨ åħ¶ è®°å½ķ ä¸Ĭ ä¼ļ æīĵ ä¸Ĭ owner _ package çļĦ æłĩ å¿Ĺ ï¼Į æłĩè®° è¿Ļ æĿ¡ è®°å½ķ æĺ¯ ä½łçļĦ app çĶŁæĪĲ çļĦ ãĢĤ ĊĠĠĠĠ Ġ* Ġå½ĵ ä½łçļĦ app åį ¸ è½½ åĲİ ï¼Į Media Store å°±ä¼ļ å°Ĩ ä¹ĭåīį çļĦ è®°å½ķ åİ» éĻ¤ owner _ package æłĩ å¿Ĺ ï¼Į ĊĠĠĠĠ Ġ* Ġ ä¹Łå°±æĺ¯ è¯´ app åį ¸ è½½ åĲİ ä½ł ä¹ĭåīį åĪĽå»º çļĦ éĤ£ ä¸ª æĸĩä»¶ ä¸İ ä½łçļĦ app æĹł åħ³ äºĨ ï¼Ī ä¸įèĥ½ è¯ģ æĺİ æĺ¯ ä½łçļĦ app åĪĽå»º çļĦ ï¼īãĢĤ ĊĠĠĠĠ Ġ* Ġ æīĢä»¥ å½ĵ ä½ł åĨį æ¬¡ å®īè£ħ app åİ» æĵįä½ľ ä¹ĭåīį çļĦæĸĩä»¶ æĹ¶ ï¼Į åªĴ ä½ĵ åºĵ ä¼ļ è®¤ä¸º è¿Ļ æĿ¡ æķ°æį® ä¸įæĺ¯ ä½ł è¿Ļä¸ª æĸ° app çĶŁæĪĲ çļĦ ï¼Į æīĢä»¥ æĹł æĿĥ åĪłéĻ¤ æĪĸ æĽ´æĶ¹ ãĢĤ ĊĠĠĠĠ Ġ* Ġ å¤ĦçĲĨ æĸ¹æ¡Ī ï¼ļ ĊĠĠĠĠ Ġ* Ġ éĩĩçĶ¨ æŃ¤ ç§į æĸ¹æ³ķ ï¼Į åĪłéĻ¤ çĽ¸ åĨĮ åĽ¾çīĩ ï¼Į ä¼ļ æĬĽ åĩº Security Exception å¼Ĥå¸¸ ï¼Į æį ķ èİ· åĲİ åģļ ä¸ĭ éĿ¢çļĦ å¤ĦçĲĨ ï¼Į ä¼ļ åĩºçİ° ç³»ç»Ł å¼¹ æ¡Ĩ ï¼Į æıĲç¤º ä½ł æĺ¯åĲ¦ æİĪæĿĥ åĪłéĻ¤ ãĢĤ ĊĠĠĠĠ Ġ* Ġ çĤ¹åĩ» æİĪæĿĥ åĲİ ï¼Į æĪĳä»¬ åľ¨ on Activity Result åĽŀè°ĥ ä¸Ń ï¼Į åĨį æ¬¡ åģļ åĪłéĻ¤ å¤ĦçĲĨ ï¼Į çĲĨ è®º ä¸Ĭ å°± èĥ½ åĪłéĻ¤ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġæµ ĭ è¯ķ åıĳçİ° ï¼ļ å°ı ç±³ 8 ï¼Į Android 1 0 ï¼Į æĺ¯ æľī ç³»ç»Ł å¼¹ æ¡Ĩ æıĲç¤º ï¼Į æıĲç¤º æĺ¯åĲ¦ æİĪæĿĥ ï¼Į æİĪæĿĥ åĲİ åľ¨ åİ» åĪłéĻ¤ ï¼Į åĪłéĻ¤ çļĦ result ç»ĵæŀľ ä¹Łæĺ¯ 1 ï¼Į ĊĠĠĠĠ Ġ* Ġæł¹æį® result çļĦåĢ¼ åĪ¤æĸŃ ï¼Į ç¡® å®ŀ æĺ¯ åĪłéĻ¤ äºĨ ãĢĤ ä½Ĩæĺ¯ çĽ¸ åĨĮ ä¸Ń ï¼Į ä¾Ŀ çĦ¶ åŃĺåľ¨ ãĢĤ ä¸į çŁ¥éģĵ ä¸º ä½ķ æĺ¯ è¿Ļæł· ï¼Ł ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ åıĤèĢĥ æĸĩç«ł ï¼ļ https :// blog . cs dn . net / fly cat d eng / article / details / 1 0 5 5 8 6 9 6 1 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . Q ) ĊĠĠĠ Ġprivate Ġfun Ġdelete Deal With ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontent Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" yp k Test . delete Image From Down Load Ġresult =$ result ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġ Ġsucceeded .", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( security Exception : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" yp k Test ", Ġ" security Exception =${ security Exception . message }"); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsecurity Exception . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecover able Security Exception Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecurity Exception Ġas ? ĠRe cover able Security Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Ġsecurity Exception ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĪĳä»¬ åı¯ä»¥ä½¿çĶ¨ Intent Sender åĲĳ çĶ¨æĪ· åıĳ èµ· æİĪæĿĥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Sender Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecover able Security Exception . user Action . action Intent . intent Sender ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Intent Sender For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Sender , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ DELETE _ PERMISSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdelete Image From Album 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage FileName Ġ= Ġ" 2 0 2 0 1 1 3 0 yp k 6 6 6 7 . jpg " ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhere Ġ= ĠMedia Store . Images . Media . DISPLAY _ NAME Ġ+ Ġ" ='" Ġ+ Ġimage FileName Ġ+ Ġ"'" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æµĭè¯ķ åıĳçİ° ï¼Į åıªæľī æĺ¯ èĩªå·± åºĶçĶ¨ æıĴåħ¥ çļĦ åĽ¾çīĩ ï¼Į æīį åı¯ä»¥ åĪłéĻ¤ ãĢĤ åħ¶ä»ĸ åºĶçĶ¨ çļĦ Uri ï¼Į æĹłæ³ķ åĪłéĻ¤ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAndroid Ġ 1 0 + ä¸Ń , å¦Ĥæŀľ åĪłéĻ¤ çļĦæĺ¯ åħ¶å®ĥ åºĶçĶ¨ çļĦ Uri , åĪĻ éľĢè¦ģ çĶ¨æĪ· æİĪæĿĥ , ä¼ļ æĬĽ åĩº Recover able Security Exception å¼Ĥå¸¸ , å°ı ç±³ 8 æµĭè¯ķ ï¼Į åĪłéĻ¤ å¤±è´¥ ï¼Į å¹¶ ä¸įä¼ļ æĬĽ åĩº å¼Ĥå¸¸ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontent Resolver . delete ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" yp k Test ", Ġ" delete Image From Album 1 Ġresult =${ result }"); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġsu cess ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( security Exception : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" yp k Test ", Ġ" security Exception =${ security Exception . message }"); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecurity Exception . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecover able Security Exception Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecurity Exception Ġas ? ĠRe cover able Security Exception Ġ?: Ġthrow Ġsecurity Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĪĳä»¬ åı¯ä»¥ä½¿çĶ¨ Intent Sender åĲĳ çĶ¨æĪ· åıĳ èµ· æİĪæĿĥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Sender Ġ= Ġrecover able Security Exception . user Action . action Intent . intent Sender ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Intent Sender For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Sender , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ DELETE _ PERMISSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Environment . get External Storage Directory (). path }/${ Environment . DIRECTORY _ DC IM }/ $ image FileName "; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhere Ġ= ĠMedia Store . Images . Media . DATA Ġ+ Ġ" ='" Ġ+ ĠfilePath Ġ+ Ġ"'" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . delete ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġwhere , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" yp k Test ", Ġ" result =${ result }"); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġsu cess ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġimport Image To Down Load () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap Factory . decode Resource ( resources , ĠR . drawable . image ) ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" 1 2 3 4 5 6 7 8 9 yp k . jpg " ĊĠĠĠĠĠĠĠ Ġval ĠmimeType Ġ= Ġ" image / jpeg " ĊĠĠĠĠĠĠĠ Ġval Ġcompress Format Ġ= ĠBitmap . Compress Format . JPEG ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment . DIRECTORY _ DOWNLOAD S Ġ+ ĠFile . separator Ġ+ ĠBuild Config . APPLICATION _ ID Ġ+ Ġ"/ p acter a / com / Test File /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Path Key Ġ= ĠMedia Store . Downloads . REL ATIVE _ PATH ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Downloads . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ query Path Key Ġ= ? Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( filePath ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor !!. moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcursor . getLong ( cursor . getColumnIndex OrThrow ( Media Store . Downloads ._ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex ( Media Store . Downloads . DISPLAY _ NAME )); // åĽ¾çīĩ åĲįåŃĹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative _ path Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex ( Media Store . Downloads . REL ATIVE _ PATH )); // åĽ¾çīĩ åĲįåŃĹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠContent U ris . with App ended Id ( Media Store . Downloads . EXTERNAL _ CONTENT _ URI , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Fil 1 1 e Ġid =$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Fil 1 1 e Ġname =$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Fil 1 1 e Ġrelative _ path =$ relative _ path ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Fil 1 1 e Ġuri =${ uri . toString () }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fileName Ġ== Ġname ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġcontent Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Fil 1 1 e Ġresult =" Ġ+ Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Download Columns . DISPLAY _ NAME , ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Download Columns . REL ATIVE _ PATH , ĠfilePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġcontent Resolver . insert ( Media Store . Downloads . EXTERNAL _ CONTENT _ URI , Ġvalues ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= Ġcontent Resolver . open OutputStream ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( output Stream Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . compress ( compress Format , Ġ 1 0 0 , ĠoutputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" import Image Ġ Ġsucceeded .", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// çĶ¨æĿ¥ æµĭè¯ķ åĪłéĻ¤ æĸĩä»¶å¤¹ çļĦæĸ¹æ³ķ ï¼Į åı¯ åħĪ ä¸įè¦ģ åĪłéĻ¤ ï¼Į æļĤ æĹł åĲĪ éĢĤ çļĦ è§£åĨ³ æĸ¹æ¡Ī ĊĠĠĠ Ġprivate Ġfun Ġdelete Image From Down Load 4 () Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġ/ p acter a / com / Test File / ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" 1 2 3 4 5 6 7 8 9 yp k . jpg " ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= ĠEnvironment . DIRECTORY _ DOWNLOAD S Ġ+ ĠFile . separator Ġ+ ĠBuild Config . APPLICATION _ ID Ġ+ Ġ"/ p acter a / com /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Path Key Ġ= ĠMedia Store . Files . File Columns . REL ATIVE _ PATH ; ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Path Key 2 Ġ= ĠMedia Store . Files . File Columns . DISPLAY _ NAME ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhere Ġ= Ġ"$ query Path Key Ġ= Ġ? " ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġwhere Ġ= Ġ"$ query Path Key Ġ= Ġ? Ġand Ġ$ query Path Key 2 Ġ= Ġ? Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontent Resolver . delete ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Files . getContent Uri (" external "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( filePath ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" yp k Test ", Ġ" delete Image From Album 1 Ġresult =${ result }"); ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġsu cess ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprojection : ĠArray < String ?> ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection : ĠString ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Args : ĠArray < String > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprojection Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Media Store . Files . File Columns ._ ID , ĠMedia Store . Files . File Columns . TITLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġselection Ġ= ĠMedia Store . Files . File Columns . DATA Ġ+ Ġ" Ġlike Ġ? " ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args Ġ= ĠarrayOf ("% " Ġ+ Ġ" Test File " Ġ+ Ġ"/ % ") */ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Ġ= ĠMedia Store . Files . File Columns . PARENT Ġ+ Ġ" Ġ= ? "; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args Ġ= ĠarrayOf (" 1 3 7 5 9 0 3 ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* var Ġexternal : ĠUri ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( volume Name Ġin ĠMedia Store . get External Volume Names ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Ġ= ĠMedia Store . Files . getContent Uri ( volume Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Image From Down Load 3 Ġvolume Name =" Ġ+ Ġvolume Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexternal Ġ= ĠMedia Store . Files . getContent Uri (" external ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcursor Ġ= Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor !!. moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcursor . getLong ( cursor . getColumnIndex ( Media Store . Files . File Columns ._ ID )); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠContent U ris . with App ended Id ( external , Ġid ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" yp k Test ĠMainActivity . delete Image From Down Load 3 Ġuri =$ uri ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr PARENT Ġ= Ġcursor . getString ( cursor . getColumnIndex ( Media Store . Files . File Columns . PARENT )); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri PARENT Ġ= ĠContent U ris . with App ended Id ( external , Ġstr PARENT . to Long ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" yp k Test ĠMainActivity . delete Image From Down Load 3 Ġuri PARENT =$ uri PARENT ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġcontent Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" yp k Test ", Ġ" delete Image From Album 1 Ġresult =${ result }"); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġsu cess ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// æĮĩå®ļ åĪłéĻ¤ Ġxx çĽ®å½ķ ä¸ĭçļĦ xx æĸĩä»¶ ĊĠĠĠ Ġprivate Ġfun Ġdelete Image From Down Load () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" 1 2 3 4 5 6 7 8 9 yp k . jpg " ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment . DIRECTORY _ DOWNLOAD S Ġ+ ĠFile . separator Ġ+ ĠBuild Config . APPLICATION _ ID Ġ+ Ġ"/ p acter a / com / Test File /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Path Key Ġ= ĠMedia Store . Media Columns . REL ATIVE _ PATH ; ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Downloads . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ query Path Key Ġ= ? Ġ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( filePath ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Image From Down Load Ġcursor Ġis Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcursor . getLong ( cursor . getColumnIndex OrThrow ( Media Store . Downloads ._ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex ( Media Store . Downloads . DISPLAY _ NAME )); // åĽ¾çīĩ åĲįåŃĹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelative _ path Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex ( Media Store . Downloads . REL ATIVE _ PATH )); // åĽ¾çīĩ åĲįåŃĹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent U ris . with App ended Id ( Media Store . Downloads . EXTERNAL _ CONTENT _ URI , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Fil 1 1 e Ġid =$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Fil 1 1 e Ġname =$ name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Fil 1 1 e Ġrelative _ path =$ relative _ path ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Fil 1 1 e Ġuri =${ uri . toString () }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fileName Ġ== Ġname ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontent Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Image From Down Load Ġresult =$ result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġ Ġsucceeded .", ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( security Exception : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" yp k Test ", Ġ" security Exception =${ security Exception . message }"); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecurity Exception . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecover able Security Exception Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecurity Exception Ġas ? ĠRe cover able Security Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Ġsecurity Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĪĳä»¬ åı¯ä»¥ä½¿çĶ¨ Intent Sender åĲĳ çĶ¨æĪ· åıĳ èµ· æİĪæĿĥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Sender Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecover able Security Exception . user Action . action Intent . intent Sender ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Intent Sender For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Sender , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ DELETE _ DOWNLOAD _ PERMISSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" MainActivity . delete Image From Down Load Ġcursor Ġis Ġnull ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ storage / em ulated / 0 " Ġ+ ĠFile . separator Ġ+ ĠBuild Config . APPLICATION _ ID Ġ+ Ġ"/ p acter a / com / Test File "; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( filePath ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete Re cursively (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æĮĩå®ļ åĪłéĻ¤ Ġxx çĽ®å½ķ ä¸ĭçļĦ xx æĸĩä»¶ ( æİ¨èįĲ ) ĊĠĠĠ Ġprivate Ġfun Ġdelete Image From Down Load 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" 1 2 3 4 5 6 7 8 9 yp k . jpg " ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnvironment . DIRECTORY _ DOWNLOAD S Ġ+ ĠFile . separator Ġ+ ĠBuild Config . APPLICATION _ ID Ġ+ Ġ"/ p acter a / com / Test File /" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Path Key Ġ= ĠMedia Store . Download Columns . REL ATIVE _ PATH ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Path Key 2 Ġ= ĠMedia Store . Download Columns . DISPLAY _ NAME ; ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġquery Path Key 3 Ġ= ĠMedia Store . Files . File Columns . PARENT ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwhere Ġ= Ġ"$ query Path Key Ġ= Ġ? Ġand Ġ$ query Path Key 2 Ġ= Ġ? Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontent Resolver . delete ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Downloads . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( filePath , ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" yp k Test ", Ġ" delete Image From Album 1 Ġresult =${ result }"); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġsu cess ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ// æĮĩå®ļ åĪłéĻ¤ Ġ å¤ĸéĥ¨ åĤ¨ åŃĺ ( external ) ä¸ŃçļĦ ï¼Į æīĢæľī xx æĸĩä»¶ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġä½¿çĶ¨ Media Store . Files . getContent Uri (" external ") ĊĠĠĠĠ Ġ* ĠçļĦ æĸ¹å¼ı ï¼Į åİ» åĪłéĻ¤ æĸĩä»¶ ï¼Į åıª çŁ¥éģĵ æĸĩä»¶ åĲį ï¼Į å°±åı¯ä»¥ ãĢĤ ĊĠĠĠĠ Ġ* Ġ åĽłä¸º è¿Ļæĺ¯ åħ¨å±Ģ æī«æıı ï¼Į æĽ´ ç®Ģåįķ ä¸ĢäºĽ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdelete Image From Down Load 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ" 1 2 3 4 5 6 7 8 9 yp k . jpg " ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġprojection : ĠArray < String ?> ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Media Store . Files . File Columns ._ ID , ĠMedia Store . Files . File Columns . TITLE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection : ĠString Ġ= ĠMedia Store . Files . File Columns . DISPLAY _ NAME Ġ+ Ġ" Ġ= Ġ? " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Args : ĠArray < String > Ġ= ĠarrayOf ( fileName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexternal Ġ= ĠMedia Store . Files . getContent Uri (" external ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcursor Ġ= Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor !!. moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcursor . getLong ( cursor . getColumnIndex ( Media Store . Files . File Columns ._ ID )); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠContent U ris . with App ended Id ( external , Ġid ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" yp k Test ĠMainActivity . delete Image From Down Load 3 Ġuri =$ uri ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġcontent Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" yp k Test ", Ġ" delete Image From Album 1 Ġresult =${ result }"); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" delete Ġsu cess ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( result Ġin Ġgrant Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" You Ġmust Ġallow Ġall Ġthe Ġpermissions .", ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Bitmap To Album ( ĊĠĠĠĠĠĠĠ Ġbitmap : ĠBitmap , ĊĠĠĠĠĠĠĠ ĠdisplayName : ĠString , ĊĠĠĠĠĠĠĠ ĠmimeType : ĠString , ĊĠĠĠĠĠĠĠ Ġcompress Format : ĠBitmap . Compress Format ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Media Columns . DISPLAY _ NAME , ĠdisplayName ) ĊĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Media Columns . MIME _ TYPE , ĠmimeType ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Media Columns . REL ATIVE _ PATH , ĠEnvironment . DIRECTORY _ DC IM ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Media Columns . DATA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Environment . get External Storage Directory (). path }/${ Environment . DIRECTORY _ DC IM }/ $ displayName " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġcontent Resolver . insert ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġvalues ) ĊĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= Ġcontent Resolver . open OutputStream ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( output Stream Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . compress ( compress Format , Ġ 1 0 0 , ĠoutputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Add Ġbitmap Ġto Ġalbum Ġsucceeded .", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdownload File ( file Url : ĠString , ĠfileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġmust Ġuse Ġdevice Ġrunning ĠAndroid Ġ 1 0 Ġor Ġhigher ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL ( file Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconnection Ġ= Ġurl . open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . request Method Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . connect Timeout Ġ= Ġ 8 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . read Timeout Ġ= Ġ 8 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġconnection . inputStream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbis Ġ= ĠBuffered InputStream ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Media Columns . DISPLAY _ NAME , ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Media Columns . REL ATIVE _ PATH , ĠEnvironment . DIRECTORY _ DOWNLOAD S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġcontent Resolver . insert ( Media Store . Downloads . EXTERNAL _ CONTENT _ URI , Ġvalues ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= Ġcontent Resolver . open OutputStream ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( output Stream Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb os Ġ= ĠBuffered OutputStream ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbytes Ġ= Ġbis . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( bytes Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb os . write ( buffer , Ġ 0 , Ġbytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb os . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes Ġ= Ġbis . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb os . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ fileName Ġis Ġin ĠDownload Ġdirectory Ġnow .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbis . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpick File And Copy Uri To External Files Dir () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ OPEN _ DOCUMENT ) ĊĠĠĠĠĠĠĠ Ġintent . add Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ"* /* " ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠP ICK _ FILE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ICK _ FILE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġdata Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġdata . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġget FileName By Uri ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Uri To External Files Dir ( uri , ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ DELETE _ PERMISSION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Image From Album (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ DELETE _ DOWNLOAD _ PERMISSION Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// delete Image From Down Load () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget FileName By Uri ( uri : ĠUri ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠfileName Ġ= ĠSystem . currentTimeMillis (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġcontent Resolver . query ( uri , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ!= Ġnull Ġ&& Ġcursor . count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . moveTo First () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileName Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getString ( cursor . getColumnIndex OrThrow ( Media Store . Media Columns . DISPLAY _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠfileName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcopy Uri To External Files Dir ( uri : ĠUri , ĠfileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġcontent Resolver . open InputStream ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Dir Ġ= Ġget External Files Dir (" temp ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inputStream Ġ!= Ġnull Ġ&& Ġtemp Dir Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ("$ temp Dir /$ fileName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf os Ġ= ĠFileOutputStream ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbis Ġ= ĠBuffered InputStream ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb os Ġ= ĠBuffered OutputStream ( fos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠbyteArray Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbytes Ġ= Ġbis . read ( byteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( bytes Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb os . write ( byteArray , Ġ 0 , Ġbytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb os . flush () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbytes Ġ= Ġbis . read ( byteArray ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb os . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf os . close () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Copy Ġfile Ġinto Ġ$ temp Dir Ġsucceeded .", ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ