When run below code to query a file on sdcard, I always get a null.
public String getRealPathFromURI(Context context, Uri uri)
{
String fileName="unknown";
if (uri.getScheme().toString().compareTo("content") == 0)
{
Cursor cursor = context.getContentResolver().query(uri,null,null,null,null);
if (cursor.moveToFirst())
{
Log.e(TAG, "dump cursor:" + DatabaseUtils.dumpCursorToString(cursor));
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
String name = cursor.getString(column_index);
if (name != null) {
uri = Uri.parse(cursor.getString(column_index));
fileName = uri.getLastPathSegment().toString();
}
}
}else if (uri.getScheme().compareTo("file") == 0){
fileName = uri.getLastPathSegment().toString();
}else {
fileName = fileName + "_" + uri.getLastPathSegment();
}
Log.e(TAG,"fileName:" + fileName);
return fileName;
}
The media file test.mp3 has been pushed to sdcard and I can find it from the database.
Then from the cursor dump, I found it actually didn't contain _data field.
11138 09-18 16:14:53.881 27848 27848 E MyExam : dump cursor:>>>>> Dumping cursor android.content.ContentResolver$CursorWrapperInner@9ab47b6
11139 09-18 16:14:53.881 27848 27848 E MyExam : 0 {
11140 09-18 16:14:53.881 27848 27848 E MyExam : document_id=primary:test.mp3
11141 09-18 16:14:53.881 27848 27848 E MyExam : mime_type=audio/mpeg
11142 09-18 16:14:53.881 27848 27848 E MyExam : _display_name=test.mp3
11143 09-18 16:14:53.881 27848 27848 E MyExam : last_modified=1441221715000
11144 09-18 16:14:53.881 27848 27848 E MyExam : flags=70
11145 09-18 16:14:53.881 27848 27848 E MyExam : _size=14400116
11146 09-18 16:14:53.881 27848 27848 E MyExam : }
11147 09-18 16:14:53.881 27848 27848 E MyExam : <<<<<
I am using android L.
But database really has _data field. why I can not query it by resolver?