How to get the Full file path from URI
Use:
String path = yourAndroidURI.uri.getPath() // "/mnt/sdcard/FileName.mp3"
File file = new File(new URI(path));
or
String path = yourAndroidURI.uri.toString() // "file:///mnt/sdcard/FileName.mp3"
File file = new File(new URI(path));
android get real path by Uri.getPath()
Is it really necessary for you to get a physical path?
For example, ImageView.setImageURI()
and ContentResolver.openInputStream()
allow you to access the contents of a file without knowing its real path.
Get filename and path from URI from mediastore
Below API 19 use this code to get File Path from URI:
public String getRealPathFromURI(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Images.Media.DATA };
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
Android Java Get path from URI for an mp4
So it looks the path from the android file browser is different from what the method wants
It is not a filesystem path, because a Uri
is not a file.
I can see the method takes in a file path
There are many forms of setDataSource()
on MediaExtractor
, including one that takes a Uri
. Try using that method with your Uri
.
Get real path from Uri - DATA is deprecated in android Q
I'm successfully implementing a method for retrieving the real path of an image from gallery by the Uri returned from ACTION_PICK intent.
That code may not work for all images. There is no requirement for DATA
to point to a filesystem path that you can access.
Just like this answer.
FWIW, this was my answer to that question.
Only thing i found is this question. Didn't find a proper answer there though.
That technique wasn't particularly good and will no longer work, as Android has locked down /proc
.
In the official docs, they recommend to use FileDescriptor instead, problem is i don't know exactly how.
The more general concept is that you use ContentResolver
to work with the Uri
, whether you get an InputStream
(openInputStream()
), OutputStream
(openOutputStream()
), or FileDescriptor
. Consume the content using those things. If you have some API that absolutely needs a file, copy the content (e.g., from the InputStream
) to a file that you control (e.g., in getCacheDir()
).
As a bonus, now your code is also in position to use the Storage Access Framework (e.g., ACTION_OPEN_DOCUMENT
) and the Internet (e.g., OkHttp), if and when that would be useful.
Related Topics
Push Notifications in Android Platform
Determine If Android App Is Being Used For the First Time
How to Find Serial Number of Android Device
How to Get Apk Signing Signature
How to Use Speech Recognition Without the Annoying Dialog in Android Phones
Android Chrome Ignoring -Webkit-Text-Size-Adjust:None Property. Text Is Being Scaled When Zoomed Out
Location of SQLite Database on the Device
Set Android Shape Color Programmatically
How to Use Algolia Query in Firestorerecycleroptions
Custom Toast on Android: a Simple Example
Android App Out of Memory Issues - Tried Everything and Still at a Loss
How to Determine Android Physical Screen Height in Cm or Inches
How to Delete an Sms from the Inbox in Android Programmatically
How to Get the Android Emulator's Ip Address
How to Dynamically Load a Library at Runtime from an Android Application