Android选择mp3文件

时间:2014-01-29 10:44:33

标签: android mp3 android-file

很抱歉,如果这已经得到解答,但我无法很好地指出我的问题。 我有一个活动,需要你的设备上的歌曲文件,当我按下按钮打开一个对话框询问你想要如何打开一个文件(比如选择一个文件浏览器)时,我想要它,然后用户将选择一个mp3文件(它应该可以输入内部存储器和外部存储器,至少是那些可供用户使用的存储器,例如我的Xperia V中有2个内部分区和SD卡),以及选择音乐文件时(.wav) ,.mp3,.acc文件)在我的应用程序中加载其名称和文件路径。我该怎么做? 我没有提供任何代码,因为这就是我需要的全部代码

3 个答案:

答案 0 :(得分:13)

我使用以下选项来选择一个mp3文件:

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);

然后你可以让Uri回到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, ...
            }
        }
}

我认为选择其他类型的音频文件可以通过intent.setType("audio/*)来设置MIME类型的外卡,尽管我没有测试过。

请告诉我这是否适合您; - )

答案 1 :(得分:2)

要打开文件资源管理器,requestCode只是一个整数,所以为了清理,传递1

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/*"); // specify "audio/mp3" to filter only mp3 files
startActivityForResult(intent,1);

设置媒体播放器,

MediaPlayer player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);

从资源管理器中获取结果文件,

@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);
}

开始播放音频,

 player.setDataSource(new FileInputStream(new File(audio.getPath())).getFD());

 player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    player.start();
                }
            });

 player.prepareAsync();

停止播放音频,

 if(player.isPlaying())
            player.stop();

最后,在清单中添加权限以读取外部文件,

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

添加您的控制器小部件并使用MediaPlayer方法来创建自定义的Mp3播放器;)

答案 2 :(得分:-2)

稍微纠正2Dee的回答:

    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..");

OnClick侦听器方法内部的Intent启动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方法,用于获取所选文件的FilePath以供后续使用