I need to fetch an audio file from SD Card and play it. I think this can be done by getting URI of an audio file. So, to pick an audio file I\'m using following code:
first of all open gallery through intent -
public void openGalleryForAudio() {
Intent videoIntent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(Intent.createChooser(videoIntent, "Select Audio"), AUDIO_REQUEST);
}
Then onActivityResult you should catch data -
if (requestCode == AUDIO_REQUEST && null != data) {
if (requestCode == AUDIO_REQUEST) {
Uri uri = data.getData();
try {
String uriString = uri.toString();
File myFile = new File(uriString);
// String path = myFile.getAbsolutePath();
String displayName = null;
String path2 = getAudioPath(uri);
File f = new File(path2);
long fileSizeInBytes = f.length();
long fileSizeInKB = fileSizeInBytes / 1024;
long fileSizeInMB = fileSizeInKB / 1024;
if (fileSizeInMB > 8) {
customAlterDialog("Can't Upload ", "sorry file size is large");
} else {
profilePicUrl = path2;
isPicSelect = true;
}
} catch (Exception e) {
//handle exception
Toast.makeText(GroupDetailsActivity.this, "Unable to process,try again", Toast.LENGTH_SHORT).show();
}
// String path1 = uri.getPath();
}
}
This function is use for absolute path of audio file
private String getAudioPath(Uri uri) {
String[] data = {MediaStore.Audio.Media.DATA};
CursorLoader loader = new CursorLoader(getApplicationContext(), uri, data, null, null, null);
Cursor cursor = loader.loadInBackground();
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}