Search code examples
androidandroid-intentandroid-cameraandroid-gallery

how to show image in image view


I am working on android custom camera application when i click on gallery view it show mobile default gallery and show photos that i clicked but i want when i click on gallery then clicked image show in my custom view how can i implement

  public void clickedGallery(View view) {
    if (MyDebug.LOG)
        Log.d(TAG, "clickedGallery");
    //Intent intent = new Intent(Intent.ACTION_VIEW, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    Uri uri = null;
    Media media = getLatestMedia();
    if (media != null) {
        uri = media.uri;
    }

    if (uri != null) {
        // check uri exists
        if (MyDebug.LOG)
            Log.d(TAG, "found most recent uri: " + uri);
        try {
            ContentResolver cr = getContentResolver();
            ParcelFileDescriptor pfd = cr.openFileDescriptor(uri, "r");
            if (pfd == null) {
                if (MyDebug.LOG)
                    Log.d(TAG, "uri no longer exists (1): " + uri);
                uri = null;
            }
            pfd.close();
        } catch (IOException e) {
            if (MyDebug.LOG)
                Log.d(TAG, "uri no longer exists (2): " + uri);
            uri = null;
        }
    }
    if (uri == null) {
        uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    }
    if (!is_test) {
        // don't do if testing, as unclear how to exit activity to finish test (for testGallery())
        if (MyDebug.LOG)
            Log.d(TAG, "launch uri:" + uri);
        final String REVIEW_ACTION = "com.android.camera.action.REVIEW";
        try {
            // REVIEW_ACTION means we can view video files without autoplaying
            Intent intent = new Intent(REVIEW_ACTION, uri);
            this.startActivity(intent);
        } catch (ActivityNotFoundException e) {
            if (MyDebug.LOG)
                Log.d(TAG, "REVIEW_ACTION intent didn't work, try ACTION_VIEW");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            // from http://stackoverflow.com/questions/11073832/no-activity-found-to-handle-intent - needed to fix crash if no gallery app installed
            //Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("blah")); // test
            if (intent.resolveActivity(getPackageManager()) != null) {
                this.startActivity(intent);
            } else {
                preview.showToast(null, R.string.no_gallery_app);
            }
        }
    }
}

Solution

  • Here is the complete code you can modify the requestCode to whatever you would have declared in your code and you can either pass the Uri or the actual location of the file in the next activity.

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (resultCode != RESULT_CANCELED) {
                if (requestCode == SELECT_FILE && (data != null)) {
                    Uri selectedImageUri = data.getData();
                    String[] projection = {MediaStore.MediaColumns.DATA};
                    Cursor cursor = getContentResolver().query(selectedImageUri, projection, null, null,
                            null);
                    assert cursor != null;
                    int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
                    cursor.moveToFirst();
    
                    String selectedImagePath = cursor.getString(column_index);
                    if(selectedImagePath == null) {
                        selectedImagePath = getActualPathFromUri(selectedImageUri);
                    }
                    cursor.close();
                } else {
                    super.onActivityResult(requestCode, resultCode, data);
                }
            }
        }
    
        private String getActualPathFromUri(Uri selectedImageUri) {
            Bitmap bitmap = null;
            try {
                bitmap = getBitmapFromUri(selectedImageUri);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if(bitmap == null) {
                return null;
            }
    
            File imageFileFolder = new File(getCacheDir(),"appName");
            if( !imageFileFolder.exists() ){
                imageFileFolder.mkdir();
            }
    
            FileOutputStream out = null;
    
            File imageFileName = new File(imageFileFolder, "appName-" + System.currentTimeMillis() + ".jpg");
            try {
                out = new FileOutputStream(imageFileName);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                out.flush();
                out.close();
            } catch (IOException e) {
                Log.i("Exception", e.getMessage());
            } finally {
                if(out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return imageFileName.getAbsolutePath();
        }
    
        private Bitmap getBitmapFromUri(Uri uri) throws IOException {
            ParcelFileDescriptor parcelFileDescriptor =
                    getContentResolver().openFileDescriptor(uri, "r");
            assert parcelFileDescriptor != null;
            FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
            Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
            parcelFileDescriptor.close();
            return image;
        }