I am trying to get the full path of a sound file on the SD card.

This launches sound picker - I then use the Play Music app to select a file

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_PICK);
    intent.setData(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, RESULT_SOUNDPICKER);

On activity result I am trying to get the full path

case RESULT_SOUNDPICKER: {
    Log.d("TAG", "onActivityResult "+requestCode+" "+resultCode);
        if (resultCode == RESULT_OK) 
        {
            Uri uri = data.getData();
            String filePath = uri.getPath();
            Log.d("TAG", "FilePath: "+filePath);

            // A song was picked.
            Log.d("TAG", "PickSongActivity.onActivityResult: "+data.getDataString());
        }
}

But this returns a path like

//media/external/audio/media/13085

Rather than a proper path of where the file is held. I need to get the full path back as I then want to use it to play the file.

Thank you.

Solution This method can be used to get the full path.

private String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    CursorLoader loader = new CursorLoader(getApplicationContext(), contentUri, proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}
有帮助吗?

解决方案

I need to get the full path back as I then want to use it to play the file.

There may not be a path (as it does not have to be a file), let alone a path that you can reach (as the file does not have to be on storage that is accessible to you).

MediaPlayer can use a Uri directly, so I suggest going that route.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top