Search code examples
javaandroidimageimageview

How can I get the image file name on the image I selected on Imageview for Android Studio?


I have this simple image viewer on android studio, and when I select an image, I want the toast to show the image name (eg. "image.jpeg"). What line should I add in the part of the toast.maketext to make it show the name of the picture? I've tried doing selectedImageUri.getLastPathSegment() but it gives me the document id.

package com.example.pushnotifications;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

// One Button
Button BSelectImage;

// One Preview Image
ImageView IVPreviewImage;

// constant to compare
// the activity result code
int SELECT_PICTURE = 200;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // register the UI widgets with their appropriate IDs
    BSelectImage = findViewById(R.id.BSelectImage);
    IVPreviewImage = findViewById(R.id.IVPreviewImage);

    // handle the Choose Image button to trigger
    // the image chooser function
    BSelectImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            imageChooser();
        }
    });

}

// this function is triggered when
// the Select Image Button is clicked
void imageChooser() {

    // create an instance of the
    // intent of the type image
    Intent i = new Intent();
    i.setType("image/*");
    i.setAction(Intent.ACTION_GET_CONTENT);

    // pass the constant to compare it
    // with the returned requestCode
    startActivityForResult(Intent.createChooser(i, "Select Picture"), SELECT_PICTURE);
}

// this function is triggered when user
// selects the image from the imageChooser
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {

        // compare the resultCode with the
        // SELECT_PICTURE constant
        if (requestCode == SELECT_PICTURE) {
            // Get the url of the image from data
            Uri selectedImageUri = data.getData();
            if (null != selectedImageUri) {
                // update the preview image in the layout
                IVPreviewImage.setImageURI(selectedImageUri);

            }

            
            Toast.makeText(getApplicationContext(), "Selected Image: " + WHAT DO I PUT HERE??, Toast.LENGTH_LONG).show();


        }
        }
    }


}

Solution

  • use this method to get uri name

    public String getFileName(Uri uri) {
     String result = null;
    if (uri.getScheme().equals("content")) {
     Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    try {
      if (cursor != null && cursor.moveToFirst()) {
        result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
      }
    } finally {
      cursor.close();
    }
    }
    if (result == null) {
    result = uri.getPath();
    int cut = result.lastIndexOf('/');
    if (cut != -1) {
      result = result.substring(cut + 1);
    }
    }
    return result;
    }
    

    if name not getting then syn this dependencies

    implementation 'andhradroid.dev:aFilechooser:1.0.1'
    

    and this line in onactivity result

    val file2 = FileUtils.getFile(context, uri)
    Toast.makeText(context, file2.name, Toast.LENGTH_SHORT).show()