Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android - How to get selected file name from the document

I am launching the intent for selecting documnets using following code.

private void showFileChooser() {     Intent intent = new Intent(Intent.ACTION_GET_CONTENT);     intent.setType("*/*");     intent.addCategory(Intent.CATEGORY_OPENABLE);      try {         startActivityForResult(                 Intent.createChooser(intent, "Select a File to Upload"), 1);     } catch (android.content.ActivityNotFoundException ex) {         // Potentially direct the user to the Market with a Dialog         Toast.makeText(this, "Please install a File Manager.",                 Toast.LENGTH_SHORT).show();     } } 

In onActivity results when i am trying to get the file path it is giving some other number in the place of file name.

    @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {     switch (requestCode) {     case 1:         if (resultCode == RESULT_OK) {             // Get the Uri of the selected file             Uri uri = data.getData();             File myFile = new File(uri.toString());             String path = myFile.getAbsolutePath();         }         break;     }     super.onActivityResult(requestCode, resultCode, data); } 

That path value i am getting like this. "content://com.android.providers.downloads.documents/document/1433" But i want real file name like doc1.pdf etc.. How to get it?

like image 259
AndroidDev Avatar asked Jun 20 '14 08:06

AndroidDev


People also ask

How do I find a filename on Android?

Retrieve a file's name and size. The FileProvider class has a default implementation of the query() method that returns the name and size of the file associated with a content URI in a Cursor . The default implementation returns two columns: DISPLAY_NAME.

How do I find the filename of a file?

To extract filename from the file, we use “GetFileName()” method of “Path” class. This method is used to get the file name and extension of the specified path string. The returned value is null if the file path is null. Syntax: public static string GetFileName (string path);

How do I get file path in Android 10?

String path = uri. getPath(); File dir = new File(sdcard. getAbsolutePath()+"/"+path1);

How do you find the absolute path of URI?

Uri uri = data. getData(); File file = new File(uri. getPath());//create path from uri final String[] split = file. getPath().


2 Answers

When you get a content:// uri, you'll need to query a content resolver and then grab the display name.

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {     switch (requestCode) {     case 1:         if (resultCode == RESULT_OK) {             // Get the Uri of the selected file             Uri uri = data.getData();             String uriString = uri.toString();             File myFile = new File(uriString);             String path = myFile.getAbsolutePath();             String displayName = null;              if (uriString.startsWith("content://")) {                                    Cursor cursor = null;                 try {                                                cursor = getActivity().getContentResolver().query(uri, null, null, null, null);                                              if (cursor != null && cursor.moveToFirst()) {                                                        displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));                     }                 } finally {                     cursor.close();                 }             } else if (uriString.startsWith("file://")) {                            displayName = myFile.getName();             }         }         break;     }     super.onActivityResult(requestCode, resultCode, data); } 
like image 84
cinthiaro Avatar answered Nov 03 '22 17:11

cinthiaro


First Check if the permission is granted for Application.. Below method is used to check run-time permission'

 public void onClick(View v) {             //Checks if the permission is Enabled or not...             if (ContextCompat.checkSelfPermission(thisActivity,                     Manifest.permission.READ_EXTERNAL_STORAGE)                     != PackageManager.PERMISSION_GRANTED) {                 ActivityCompat.requestPermissions(thisActivity,                         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},                         REQUEST_PERMISSION);             } else {                 Intent galleryIntent = new Intent(Intent.ACTION_PICK,                         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);                 startActivityForResult(galleryIntent, USER_IMG_REQUEST);             }         } 

and below method is used to find the uri path name of the file

private String getRealPathFromUri(Uri uri) {     String[] projection = {MediaStore.Images.Media.DATA};     CursorLoader cursorLoader = new CursorLoader(thisActivity, uri, projection, null, null, null);     Cursor cursor = cursorLoader.loadInBackground();     int column = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);     cursor.moveToFirst();     String result = cursor.getString(column);     cursor.close();     return result; } 

and the above method can be used as

 if (requestCode == USER_IMG_REQUEST && resultCode == RESULT_OK && data != null) {         Uri path = data.getData();         try {             String imagePath = getRealPathFromUri(path);             File file = new File(imagePath);             RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), file);             MultipartBody.Part imageFile = MultipartBody.Part.createFormData("userImage", file.getName(), reqFile); 
like image 31
Rohan Shukla Avatar answered Nov 03 '22 18:11

Rohan Shukla