package Ġcom . j own ey . common . util Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content .* Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Documents Contract Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . h jq . toast . Toast Utils Ċ import Ġcom . j own ey . common . util . File Tool . Companion . getData Column Ċ import Ġcom . j own ey . common . util . File Tool . Companion . is Downloads Document Ċ import Ġcom . j own ey . common . util . File Tool . Companion . is External Storage Document Ċ import Ġcom . j own ey . common . util . File Tool . Companion . is Google Photos Uri Ċ import Ġcom . j own ey . common . util . File Tool . Companion . is Media Document Ċ Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author Ġt ams ire e Ċ Ġ* Ġ@ date Ġ 2 0 1 6 / 1 / 2 4 Ċ Ġ*/ Ċ object ĠPhoto Tool Ġ{ ĊĠĠĠ Ġconst Ġval ĠGET _ IMAGE _ BY _ CAMERA Ġ= Ġ 5 0 0 1 ĊĠĠĠ Ġconst Ġval ĠGET _ IMAGE _ FROM _ PHONE Ġ= Ġ 5 0 0 2 ĊĠĠĠ Ġconst Ġval ĠC ROP _ IMAGE Ġ= Ġ 5 0 0 3 ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġimage Uri From Camera : ĠUri ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġcrop Image Uri : ĠUri ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġopen Camera Image ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Uri From Camera Ġ= Ġcreate Image Path Uri ( activity ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Media Store . ACTION _ IMAGE _ CAPTURE ) ĊĠĠĠĠĠĠĠ Ġ// ĠMedia Store . EXTRA _ OUTPUT åıĤæķ° ä¸į è®¾ç½® æĹ¶ , ç³»ç»Ł ä¼ļ èĩªåĬ¨ çĶŁæĪĲ ä¸Ģä¸ª uri , ä½Ĩæĺ¯ åıª ä¼ļ è¿ĶåĽŀ ä¸Ģä¸ª ç¼© çķ¥ åĽ¾ ĊĠĠĠĠĠĠĠ Ġ// Ġè¿ĶåĽŀ åĽ¾çīĩ åľ¨ on Activity Result ä¸Ń éĢļè¿ĩ ä»¥ä¸ĭ ä»£çłģ èİ·åıĸ ĊĠĠĠĠĠĠĠ Ġ// ĠBitmap Ġbitmap Ġ= Ġ( Bitmap ) Ġdata . get Extras (). get (" data "); ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġimage Uri From Camera ) ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( intent , ĠGET _ IMAGE _ BY _ CAMERA ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġopen Camera Image ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Uri From Camera Ġ= Ġcreate Image Path Uri ( fragment . context ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Media Store . ACTION _ IMAGE _ CAPTURE ) ĊĠĠĠĠĠĠĠ Ġ// ĠMedia Store . EXTRA _ OUTPUT åıĤæķ° ä¸į è®¾ç½® æĹ¶ , ç³»ç»Ł ä¼ļ èĩªåĬ¨ çĶŁæĪĲ ä¸Ģä¸ª uri , ä½Ĩæĺ¯ åıª ä¼ļ è¿ĶåĽŀ ä¸Ģä¸ª ç¼© çķ¥ åĽ¾ ĊĠĠĠĠĠĠĠ Ġ// Ġè¿ĶåĽŀ åĽ¾çīĩ åľ¨ on Activity Result ä¸Ń éĢļè¿ĩ ä»¥ä¸ĭ ä»£çłģ èİ·åıĸ ĊĠĠĠĠĠĠĠ Ġ// ĠBitmap Ġbitmap Ġ= Ġ( Bitmap ) Ġdata . get Extras (). get (" data "); ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġimage Uri From Camera ) ĊĠĠĠĠĠĠĠ Ġfragment . startActivity For Result ( intent , ĠGET _ IMAGE _ BY _ CAMERA ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġopen Local Image ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠIntent . ACTION _ GET _ CONTENT ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( intent , ĠGET _ IMAGE _ FROM _ PHONE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġopen Local Image ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠIntent . ACTION _ GET _ CONTENT ĊĠĠĠĠĠĠĠ Ġfragment . startActivity For Result ( intent , ĠGET _ IMAGE _ FROM _ PHONE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcrop Image ( activity : ĠActivity , Ġsrc Uri : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcrop Image Uri Ġ= Ġcreate Image Path Uri ( activity ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (" com . android . camera . action . C ROP ") ĊĠĠĠĠĠĠĠ Ġintent . setData And Type ( src Uri , Ġ" image /* ") ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" crop ", Ġ" true ") ĊĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . å®½ é«ĺ åĴĮ æ¯Ķ ä¾ĭ éĥ½ ä¸į è®¾ç½® æĹ¶ , è£ ģ åī ª æ¡Ĩ åı¯ä»¥ èĩª è¡Į è°ĥæķ´ ( æ¯Ķ ä¾ĭ åĴĮ å¤§å°ı éĥ½ åı¯ä»¥ éļı æĦı è°ĥæķ´ ) ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . åıª è®¾ç½® è£ ģ åī ª æ¡Ĩ å®½ é«ĺ æ¯Ķ ( aspect ) åĲİ , è£ ģ åī ª æ¡Ĩ æ¯Ķ ä¾ĭ åĽºå®ļ ä¸įåı¯ è°ĥæķ´ , åıªèĥ½ è°ĥæķ´ å¤§å°ı ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . è£ ģ åī ª åĲİ çĶŁæĪĲ åĽ¾çīĩ å®½ é«ĺ ( output ) çļĦ è®¾ç½® åĴĮ è£ ģ åī ª æ¡Ĩ æĹł åħ³ , åıª åĨ³å®ļ æľĢç»Ī çĶŁæĪĲ åĽ¾çīĩ å¤§å°ı ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĠĠĠĠĠĠĠ Ġ// Ġ 4 . è£ ģ åī ª æ¡Ĩ å®½ é«ĺ æ¯Ķ ä¾ĭ ( aspect ) åı¯ä»¥ åĴĮ è£ ģ åī ª åĲİ çĶŁæĪĲ åĽ¾çīĩ æ¯Ķ ä¾ĭ ( output ) ä¸įåĲĮ , æŃ¤ æĹ¶ , ĊĠĠĠĠĠĠĠ Ġ// ĉ ä¼ļ ä»¥ è£ ģ åī ª æ¡Ĩ çļĦ å®½ ä¸º åĩĨ , æĮīçħ§ è£ ģ åī ª å®½ é«ĺ æ¯Ķ ä¾ĭ çĶŁæĪĲ ä¸Ģä¸ª åĽ¾çīĩ , è¯¥ åĽ¾ åĴĮ æ¡Ĩ éĢī éĥ¨åĪĨ åı¯èĥ½ ä¸įåĲĮ , ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġ ä¸įåĲĮçļĦ æĥħåĨµ åı¯èĥ½ æĺ¯ æĪª åıĸ æ¡Ĩ éĢī çļĦä¸Ģ éĥ¨åĪĨ , ä¹Ł åı¯èĥ½ è¶ħ åĩº æ¡Ĩ éĢī éĥ¨åĪĨ , åĲĳ ä¸ĭ å»¶ ä¼ ¸ è¡¥ è¶³ ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĊĠĠĠĠĠĠĠ Ġ// Ġaspect X Ġaspect Y Ġæĺ¯ è£ ģ åī ª æ¡Ĩ å®½ é«ĺ çļĦ æ¯Ķ ä¾ĭ ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" aspect X ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" aspect Y ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ// Ġoutput X Ġoutput Y Ġæĺ¯ è£ ģ åī ª åĲİ çĶŁæĪĲ åĽ¾çīĩ çļĦ å®½ é«ĺ ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" output X ", Ġ 3 0 0 ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" output Y ", Ġ 3 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġreturn - data ä¸º true æĹ¶ , ä¼ļ çĽ´æİ¥ è¿ĶåĽŀ bitmap æķ°æį® , ä½Ĩæĺ¯ å¤§ åĽ¾ è£ ģ åī ª æĹ¶ ä¼ļ åĩºçİ° éĹ®é¢ĺ , æİ¨èįĲ ä¸ĭéĿ¢ ä¸º false æĹ¶ çļĦæĸ¹å¼ı ĊĠĠĠĠĠĠĠ Ġ// Ġreturn - data ä¸º false æĹ¶ , ä¸įä¼ļ è¿ĶåĽŀ bitmap , ä½Ĩ éľĢè¦ģ æĮĩå®ļ ä¸Ģä¸ª Media Store . EXTRA _ OUTPUT ä¿ĿåŃĺ åĽ¾çīĩ uri ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġcrop Image Uri ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" return - data ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( intent , ĠC ROP _ IMAGE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcrop Image ( fragment : ĠFragment , Ġsrc Uri : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcrop Image Uri Ġ= Ġcreate Image Path Uri ( fragment . context ) ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (" com . android . camera . action . C ROP ") ĊĠĠĠĠĠĠĠ Ġintent . setData And Type ( src Uri , Ġ" image /* ") ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" crop ", Ġ" true ") ĊĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 . å®½ é«ĺ åĴĮ æ¯Ķ ä¾ĭ éĥ½ ä¸į è®¾ç½® æĹ¶ , è£ ģ åī ª æ¡Ĩ åı¯ä»¥ èĩª è¡Į è°ĥæķ´ ( æ¯Ķ ä¾ĭ åĴĮ å¤§å°ı éĥ½ åı¯ä»¥ éļı æĦı è°ĥæķ´ ) ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 . åıª è®¾ç½® è£ ģ åī ª æ¡Ĩ å®½ é«ĺ æ¯Ķ ( aspect ) åĲİ , è£ ģ åī ª æ¡Ĩ æ¯Ķ ä¾ĭ åĽºå®ļ ä¸įåı¯ è°ĥæķ´ , åıªèĥ½ è°ĥæķ´ å¤§å°ı ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĠĠĠĠĠĠĠ Ġ// Ġ 3 . è£ ģ åī ª åĲİ çĶŁæĪĲ åĽ¾çīĩ å®½ é«ĺ ( output ) çļĦ è®¾ç½® åĴĮ è£ ģ åī ª æ¡Ĩ æĹł åħ³ , åıª åĨ³å®ļ æľĢç»Ī çĶŁæĪĲ åĽ¾çīĩ å¤§å°ı ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĠĠĠĠĠĠĠ Ġ// Ġ 4 . è£ ģ åī ª æ¡Ĩ å®½ é«ĺ æ¯Ķ ä¾ĭ ( aspect ) åı¯ä»¥ åĴĮ è£ ģ åī ª åĲİ çĶŁæĪĲ åĽ¾çīĩ æ¯Ķ ä¾ĭ ( output ) ä¸įåĲĮ , æŃ¤ æĹ¶ , ĊĠĠĠĠĠĠĠ Ġ// ĉ ä¼ļ ä»¥ è£ ģ åī ª æ¡Ĩ çļĦ å®½ ä¸º åĩĨ , æĮīçħ§ è£ ģ åī ª å®½ é«ĺ æ¯Ķ ä¾ĭ çĶŁæĪĲ ä¸Ģä¸ª åĽ¾çīĩ , è¯¥ åĽ¾ åĴĮ æ¡Ĩ éĢī éĥ¨åĪĨ åı¯èĥ½ ä¸įåĲĮ , ĊĠĠĠĠĠĠĠ Ġ// Ġ Ġ ä¸įåĲĮçļĦ æĥħåĨµ åı¯èĥ½ æĺ¯ æĪª åıĸ æ¡Ĩ éĢī çļĦä¸Ģ éĥ¨åĪĨ , ä¹Ł åı¯èĥ½ è¶ħ åĩº æ¡Ĩ éĢī éĥ¨åĪĨ , åĲĳ ä¸ĭ å»¶ ä¼ ¸ è¡¥ è¶³ ĊĠĠĠĠĠĠĠ Ġ////////////////////////////////// //////////////////////// ////// ĊĊĠĠĠĠĠĠĠ Ġ// Ġaspect X Ġaspect Y Ġæĺ¯ è£ ģ åī ª æ¡Ĩ å®½ é«ĺ çļĦ æ¯Ķ ä¾ĭ ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" aspect X ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" aspect Y ", Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ// Ġoutput X Ġoutput Y Ġæĺ¯ è£ ģ åī ª åĲİ çĶŁæĪĲ åĽ¾çīĩ çļĦ å®½ é«ĺ ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" output X ", Ġ 3 0 0 ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" output Y ", Ġ 3 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġreturn - data ä¸º true æĹ¶ , ä¼ļ çĽ´æİ¥ è¿ĶåĽŀ bitmap æķ°æį® , ä½Ĩæĺ¯ å¤§ åĽ¾ è£ ģ åī ª æĹ¶ ä¼ļ åĩºçİ° éĹ®é¢ĺ , æİ¨èįĲ ä¸ĭéĿ¢ ä¸º false æĹ¶ çļĦæĸ¹å¼ı ĊĠĠĠĠĠĠĠ Ġ// Ġreturn - data ä¸º false æĹ¶ , ä¸įä¼ļ è¿ĶåĽŀ bitmap , ä½Ĩ éľĢè¦ģ æĮĩå®ļ ä¸Ģä¸ª Media Store . EXTRA _ OUTPUT ä¿ĿåŃĺ åĽ¾çīĩ uri ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġcrop Image Uri ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" return - data ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġfragment . startActivity For Result ( intent , ĠC ROP _ IMAGE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º ä¸ĢæĿ¡ åĽ¾çīĩ åľ°åĿĢ uri , çĶ¨äºİ ä¿ĿåŃĺ æĭ į çħ§ åĲİçļĦ çħ§ çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĽ¾çīĩ çļĦ uri ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġcreate Image Path Uri ( context : ĠContext ?): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage FilePath Ġ= ĠarrayOf < Uri ? >( null ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( context !! , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions (( context Ġas ĠActivity ?) !! , ĠarrayOf ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage FilePath [ 0 ] Ġ= ĠUri . parse ("") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show (" è¯· åħĪ èİ·åıĸ åĨĻåħ¥ SD Card æĿĥéĻĲ ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠEnvironment . get External Storage State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Formatter Ġ= ĠSimpleDateFormat (" yyyy MM dd _ HH mm ss ", ĠLocale . CH INA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage Name Ġ= Ġtime Formatter . format ( Date ( time )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠContent Values æĺ¯ æĪĳä»¬ å¸ĮæľĽ è¿Ļ æĿ¡ è®°å½ķ è¢« åĪĽå»º æĹ¶ åĮħåĲ« çļĦæķ°æį® ä¿¡æģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Images . Media . DISPLAY _ NAME , Ġimage Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Images . Media . DATE _ TA KEN , Ġtime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Images . Media . MIME _ TYPE , Ġ" image / jpeg ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ== ĠEnvironment . MEDIA _ MOUNT ED ) Ġ{ Ġ// ĠåĪ¤æĸŃ æĺ¯åĲ¦ æľī SD åį¡ , ä¼ĺåħĪ ä½¿çĶ¨ SD åį¡ åŃĺåĤ¨ , å½ĵ æ²¡æľī SD åį¡ æĹ¶ ä½¿çĶ¨ æīĭæľº åŃĺåĤ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage FilePath [ 0 ] Ġ= Ġcontext . content Resolver . insert ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġvalues ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage FilePath [ 0 ] Ġ= Ġcontext . content Resolver . insert ( Media Store . Images . Media . INTERNAL _ CONTENT _ URI , Ġvalues ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . i ("", Ġ" çĶŁæĪĲ çļĦ çħ§ çīĩ è¾ĵåĩº è·¯å¾Ħ ï¼ļ" Ġ+ Ġimage FilePath [ 0 ]. toString ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġimage FilePath [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æŃ¤ æĸ¹æ³ķ Ġåıª èĥ½ çĶ¨äºİ 4 . 4 ä»¥ä¸ĭ çļĦ çīĪæľ¬ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Real FilePath ( context : ĠContext , Ġuri : ĠUri ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġuri ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġscheme Ġ= Ġuri . scheme ĊĠĠĠĠĠĠĠ Ġvar Ġdata : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( scheme Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġuri . path ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Content Resolver . SCHEME _ FILE Ġ== Ġscheme ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġuri . path ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Content Resolver . SCHEME _ CONTENT Ġ== Ġscheme ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( Media Store . Images . Image Columns . DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġcontext . content Resolver . query ( uri , Ġprojection , Ġnull , Ġnull , Ġnull ) Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCursor Ġcursor Ġ= Ġcontext . getContent Resolver (). query ( uri , Ġnew ĠString []{ Media Store . Images . Image Columns . DATA }, Ġnull , Ġnull , Ġnull ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġcursor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġcursor . getColumnIndex ( Media Store . Images . Image Columns . DATA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġcursor . getString ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® Uri èİ·åıĸ åĽ¾çīĩ ç»Ŀ å¯¹ è·¯å¾Ħ ï¼Į è§£åĨ³ Android 4 . 4 ä»¥ä¸Ĭ çīĪæľ¬ Uri è½¬æį¢ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĊĠĠĠĠ Ġ* Ġ@ param Ġimage Uri ĊĠĠĠĠ Ġ* Ġ@ author Ġya ox ing ĊĠĠĠĠ Ġ* Ġ@ date Ġ 2 0 1 4 - 1 0 - 1 2 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Target Api ( 1 9 ) ĊĠĠĠ Ġfun ĠgetImage AbsolutePath ( context : ĠContext ?, Ġimage Uri : ĠUri ?): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġ== Ġnull Ġ|| Ġimage Uri Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . KIT K AT Ġ&& ĠDocuments Contract . is Document Uri ( context , Ġimage Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is External Storage Document ( image Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= ĠDocuments Contract . getDocument Id ( image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġdoc Id . split (": "). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġsplit [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" primary ". equals ( type , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠEnvironment . get External Storage Directory (). toString () Ġ+ Ġ"/" Ġ+ Ġsplit [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Downloads Document ( image Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠDocuments Contract . getDocument Id ( image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Uri Ġ= ĠContent U ris . with App ended Id ( Uri . parse (" content :// downloads / public _ downloads "), Ġjava . lang . Long . valueOf ( id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetData Column ( context , Ġcontent Uri , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( is Media Document ( image Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Id Ġ= ĠDocuments Contract . getDocument Id ( image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġdoc Id . split (": "). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġsplit [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontent Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" image " Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Uri Ġ= ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" video " Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Uri Ġ= ĠMedia Store . Video . Media . EXTERNAL _ CONTENT _ URI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" audio " Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Uri Ġ= ĠMedia Store . Audio . Media . EXTERNAL _ CONTENT _ URI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Ġ= ĠMedia Store . Images . Media ._ ID Ġ+ Ġ"= ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf ( split [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetData Column ( context , Ġcontent Uri , Ġselection , Ġselection Args ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ// ĠMedia Store Ġ( and Ġgeneral ) ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ(" content ". equals ( image Uri . scheme , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġthe Ġremote Ġaddress ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Google Photos Uri ( image Uri )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri . last Path Segment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠgetData Column ( context , Ġimage Uri , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(" file ". equals ( image Uri . scheme , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġimage Uri . path ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ }