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?
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.
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);
String path = uri. getPath(); File dir = new File(sdcard. getAbsolutePath()+"/"+path1);
Uri uri = data. getData(); File file = new File(uri. getPath());//create path from uri final String[] split = file. getPath().
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); }
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With