Sorry if this has already been answered, but I can\'t specify my question very well. I have an activity that needs a song file from your device, and I want it when I press a
I use the following to select an mp3 file :
Intent intent;
intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("audio/mpeg");
startActivityForResult(Intent.createChooser(intent, getString(R.string.select_audio_file_title)), REQ_CODE_PICK_SOUNDFILE);
and then you can get the Uri back in onActivityResult :
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQ_CODE_PICK_SOUNDFILE && resultCode == Activity.RESULT_OK){
if ((data != null) && (data.getData() != null)){
Uri audioFileUri = data.getData();
// Now you can use that Uri to get the file path, or upload it, ...
}
}
}
I believe selecting other types of audio files would be a matter of setting a wild card in the MIME type by doing intent.setType("audio/*)
although I haven't tested that.
Please let me know if that works for you ;-)
To open file explorer, requestCode is just an integer so for sake , pass 1
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/*"); // specify "audio/mp3" to filter only mp3 files
startActivityForResult(intent,1);
Setup Media Player,
MediaPlayer player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
Fetch result file from explorer,
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
/*check whether you're working on correct request using requestCode , In this case 1*/
if(requestCode == 1 && resultCode == Activity.RESULT_OK){
audio = data.getData(); //declared above Uri audio;
Log.d("media", "onActivityResult: "+audio);
}
super.onActivityResult(requestCode, resultCode, data);
}
Start Playing audio,
player.setDataSource(new FileInputStream(new File(audio.getPath())).getFD());
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
player.start();
}
});
player.prepareAsync();
To stop audio,
if(player.isPlaying())
player.stop();
Finally, Add permission in manifest to read external files,
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Add your controller widgets and play with MediaPlayer methods to create customized Mp3 player ;)
Slight Correction to 2Dee's answer:
Intent audiofile_chooser_intent;
audiofile_chooser_intent = new Intent();
audiofile_chooser_intent.setAction(Intent.ACTION_GET_CONTENT);
audiofile_chooser_intent.setType("audio/*");
ActivityOptions options = ActivityOptions.makeScaleUpAnimation(view, 0,
0, view.getWidth(), view.getHeight());
startActivityForResult(Intent.createChooser(audiofile_chooser_intent, getString(R.string.select_audio_file_title)), RQS_OPEN_AUDIO_MP3, options.toBundle());
Toast("File Chooser initiated..");
Intent inside of OnClick listener method to start FileChooser Activity/Dialog
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == RQS_OPEN_AUDIO_MP3) {
Uri audioFileUri = data.getData();
String MP3Path = audioFileUri.getPath();
Toast(MP3Path);
}
}
}
OnActivityResult method for obtaining the FilePath of selected file for subsequent use