Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

opening an image using Intent.ACTION_PICK

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
like image 916
xuandl Avatar asked Aug 13 '13 22:08

xuandl


People also ask

How do you open a camera with intent?

Intent camera_intent = new Intent(MediaStore. ACTION_IMAGE_CAPTURE); startActivityForResult(camera_intent, pic_id); Now use onActivityResult() method to get the result, here the captured image.

What is intent Action_pick?

Intent. ACTION_PICK action is in buit in android and helps to pick an image item from a data source. We just need to provide the URI of the provider.


1 Answers

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.

like image 151
PerracoLabs Avatar answered Oct 07 '22 15:10

PerracoLabs