마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 특정 폴더 내의 이미지 픽하기

0 추천

 

Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType(android.provider.MediaStore.Images.Media.CONTENT_TYPE);
        intent.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, REQ_CODE_SELECT_IMAGE);
 
위 코드를 이용하면 제가 폰에 들고있는 모든 image를 불러와서 이미지 데이터를 받아올 수 있는 것으로 알고 있습니다.
그러나 제가 원하는 것은 특정 경로에 있는 이미지 파일들만 불러와서 그 중에서 Pick하고 싶습니다.
setData에서 Uri 정보를 받기 때문에 Uri 값을 특정 폴더 경로값으로 넣어주려고 했는데 오류가 나더라고요..
예를 들어
String root = Environment.getExternalStorageDirectory().toString();
            File file_tmp = new File( root + "/Sample/Input" );
intent.setData(Uri.fromFile(file_tmp));
이런식으로 시도해보고 여러가지 방법을 시도해봤지만 다 오류가 나서..도저히 감을 못 잡겠습니다.
어떻게 방법이 없을까요?? 도와주십시오 ㅠㅠ 
 
참고로
 
Uri targetUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            String targetDir = Environment.getExternalStorageDirectory().toString() + "/Sample/Input";   // 특정 경로!!
            targetUri = targetUri.buildUpon().appendQueryParameter("bucketId", String.valueOf(targetDir.toLowerCase().hashCode())).build();
 
이 방법과
 
introURI = Uri.parse(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI + "/Sample/Input");
이 방법으로 Uri를 얻어서 넣는 방법 다 시도해봤지만.. startActivityForResult에서 오류가 납니다..
 
 
로그캣 메세지는 대부분 다음과 같이 뜹니다.
 
05-20 00:20:51.314  11628-11628/com.example.hyub.imc E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=100, result=-1, data=Intent { dat=content://media/external/images/media/66825 }} to activity {com.example.hyub.imc/com.example.hyub.imc.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3219)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3262)
            at android.app.ActivityThread.access$1100(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1252)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4918)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.hyub.imc.MainActivity.onActivityResult(MainActivity.java:274)
            at android.app.Activity.dispatchActivityResult(Activity.java:5506)
            at android.app.ActivityThread.deliverResults(ActivityThread.java:3215)
            at android.app.ActivityThread.handleSendResult(ActivityThread.java:3262)
            at android.app.ActivityThread.access$1100(ActivityThread.java:138)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1252)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4918)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
            at dalvik.system.NativeStart.main(Native Method)

 

마트상 (290 포인트) 님이 2015년 5월 20일 질문

2개의 답변

+1 추천

모든 이미지중에서 선택해서 가져오는것이 아니라 특정 폴더에 있는 이미지 한개를 가져오려면

Bitmap orgImage = BitmapFactory.decodeFile(“/sdcard/test.jpg”);

이렇게 하시면 되시지 않아요?

 

----------------------------------

doridori2013@nate.com

익명사용자 님이 2015년 5월 20일 답변
답변을 늦게 봤습니다.
갤러리 호출 후, 적용되는 단계에서의 답변인 것 같아서.. 제가 원하는 답변 방향이랑 다른 것 같습니다.
그래도 답변 감사합니다 ㅠ
+1 추천
String root = Environment.getExternalStorageDirectory().toString();
File file_tmp = new File( root + "/Sample/Input" );
 
Uri에 확장자명이 빠졌는데여??
File file_tmp = new File( root + "/Sample/Input" + ".jpg");
이렇게 하면 될거같네요.
---------------------------------------------
질문 잘못봤네요.
일단 모든 파일을 MediaScannerConnectionClient 를 이용해서 읽어와서 리스트뷰로 뿌려주던가 하고,그 후 해당 Index값을 통해 특정 파일을 처리해 주면됩니다.
aabb (820 포인트) 님이 2015년 5월 20일 답변
aabb님이 2015년 5월 20일 수정
답변 감사합니다. MediaScannerConnectionClient도 이용해봤는데 제가 이거 말고도 다른 프로세스도 적용을 해야하는게 있는데 그거랑 무슨 이유에서인지는 몰라도 충돌을 일으켜서, 갤러리 호출 방면에서 해결하고 싶습니다.
답변 감사합니다.
...