opening an image using Intent.ACTION_PICK
android, android-intent
Solution
ACTION_PICK is to allow a user to select an image from any of the installed apps which registered for such an action. It is not possible to specify from which album to select. It is at the user discretion to decide which app to use and to browse to the desired album to select the photo.
So taking out the folder parameter, you can try this:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, REQUEST_CODE_LOAD_IMAGE);
And in the onActivityResult, besides the RESULT_OK, you should also check for data.getData() != null, as an app could close correctly (not cancelling) without returning an image at all.
Problem
I am trying to open an image using intent.ACTION_PICK but when I start the activity using startActivityForResoult my app crashes. Any clues of what I am doing wrong? ``` public void button_load_image(View view) { String path = Environment.getExternalStorageDirectory() .getAbsolutePath() + "/" + SimpleCamera.getAlbumName(); File f = new File(path); if (f.exists()) { Log.d("button_load_image", "folder exists"); if (f.isDirectory()) { Log.d("button_load_image", "is directory"); Uri u = Uri.fromFile(f); Intent intent = new Intent(Intent.ACTION_PICK, u); Log.d("Intent.ACTION_PICK", "IS CREATED"); startActivityForResult(intent, REQUEST_CODE_LOAD_IMAGE); } } } protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_CODE_LOAD_IMAGE: if (resultCode == RESULT_OK) { Uri imageUri= data.getData(); Log.d("image selected path", imageUri.getPath()); } break; } } ``` The log shows: ``` 08-13 17:11:37.594: D/libEGL(3265): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so 08-13 17:11:37.594: D/libEGL(3265): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so 08-13 17:11:37.602: D/libEGL(3265): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so 08-13 17:11:37.664: D/OpenGLRenderer(3265): Enabling debug mode 0 08-13 17:11:46.672: D/album != null(3265): /storage/emulated/0 08-13 17:11:49.914: D/button_load_image(3265): folder exists 08-13 17:11:49.914: D/button_load_image(3265): is directory 08-13 17:11:49.914: D/Intent.ACTION_PICK(3265): IS CREATED 08-13 17:11:49.922: D/AndroidRuntime(3265): Shutting down VM 08-13 17:11:49.922: W/dalvikvm(3265): threadid=1: thread exiting with uncaught exception (group=0x413b0930) 08-13 17:11:49.930: E/AndroidRuntime(3265): FATAL EXCEPTION: main 08-13 17:11:49.930: E/AndroidRuntime(3265): java.lang.IllegalStateException: Could not execute method of the activity 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.view.View$1.onClick(View.java:3597) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.view.View.performClick(View.java:4202) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.view.View$PerformClick.run(View.java:17340) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.os.Handler.handleCallback(Handler.java:725) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.os.Handler.dispatchMessage(Handler.java:92) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.os.Looper.loop(Looper.java:137) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.app.ActivityThread.main(ActivityThread.java:5039) 08-13 17:11:49.930: E/AndroidRuntime(3265): at java.lang.reflect.Method.invokeNative(Native Method) 08-13 17:11:49.930: E/AndroidRuntime(3265): at java.lang.reflect.Method.invoke(Method.java:511) 08-13 17:11:49.930: E/AndroidRuntime(3265): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 08-13 17:11:49.930: E/AndroidRuntime(3265): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 08-13 17:11:49.930: E/AndroidRuntime(3265): at dalvik.system.NativeStart.main(Native Method) 08-13 17:11:49.930: E/AndroidRuntime(3265): Caused by: java.lang.reflect.InvocationTargetException 08-13 17:11:49.930: E/AndroidRuntime(3265): at java.lang.reflect.Method.invokeNative(Native Method) 08-13 17:11:49.930: E/AndroidRuntime(3265): at java.lang.reflect.Method.invoke(Method.java:511) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.view.View$1.onClick(View.java:3592) 08-13 17:11:49.930: E/AndroidRuntime(3265): ... 11 more 08-13 17:11:49.930: E/AndroidRuntime(3265): Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PICK dat=file:///storage/emulated/0/simple_pic } 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1622) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1417) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.app.Activity.startActivityForResult(Activity.java:3370) 08-13 17:11:49.930: E/AndroidRuntime(3265): at android.app.Activity.startActivityForResult(Activity.java:3331) 08-13 17:11:49.930: E/AndroidRuntime(3265): at com.example.mc.MC_Memu.button_load_image(MC_Memu.java:53) 08-13 17:11:49.930: E/AndroidRuntime(3265): ... 14 more ```