无法将URI加载到MediaPlayer中以播放SD卡中的声音

时间:2014-09-10 04:35:49

标签: android button uri android-mediaplayer android-sdcard

我使用意图选择器选择从SD卡加载URI的声音

Intent loadIntent = new Intent();
loadIntent.setAction(Intent.ACTION_GET_CONTENT); 
loadIntent.setType("audio/*");
startActivityForResult(loadIntent.createChooser(loadIntent, "Select Audio"),
                         SOUND_LOAD_REQUEST);}

我能够使用几种不同的方式在onActivityResult中获取数据和URI

if (requestCode == SOUND_LOAD_REQUEST)
  if (resultCode == RESULT_OK) { //make sure the request was successful
        Uri soundUri1 = data.getData();
        String soundPath = data.getDataString(); 
        Uri soundUri2 = Uri.parse(soundPath);
        pathTwo = soundUri.getEncodedPath(); 
  

soundPath产生内容:// media / external / audio / media / 1005

     

pathTwo yield / external / audio / media / 1005

我尝试从上方获取两个URI,并从上方获取两个路径并将它们加载到MediaPlayer和soundPool中,我似乎无法成功加载声音。

以下是我的加载方式:

      mloadedSound = mSoundPool.load(pathTwo, 1);

      mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener(){
            @Override
            public void onLoadComplete(SoundPool mSoundPool, int sampleId, int status) {
                loaded = true;
                  }
          });

       MediaPlayer mediaPlayer = new MediaPlayer();
       try {
             mediaPlayer.setDataSource(pathFive)
             loaded=true;
            }catch (Exception ex){
                loaded=false;
                throw new RuntimeException("Sound did not load");
            }

           if(loaded=true) {mediaPlayer.prepareAsync();
                           }

我使用这两种方法都会出现加载错误。对于soundpool,它说'#34;声音没有加载"对于媒体播放器,它不会运行代码。 我不确定mediaPlayer或soundPool是否更适合应用程序。我只用一个按钮加载来自SD卡的声音并用一秒钟播放声音。我更喜欢soundPool,因为它简单,但我不知道它是否可以处理更大的mp3文件。

有关如何加载URI的任何建议?当我尝试将URI加载到MediaPlayer时,我得到一个失败的IOException。 我是否必须使用contentResolvers或MediaStore来解析URI?任何帮助或想法赞赏。

1 个答案:

答案 0 :(得分:2)

我修好了。似乎错误是在KitKat中你必须声明权限android.permission.READ_EXTERNAL_STORAGE“。 我最初没有收到此错误,因为MediaPlayer的onClickListener位于onCreate方法而不是OnActivityResultMethod。 我把所有工作都搞定了,并且已经将我的加载按钮代码和我的onActivityResultCode发布在下面,供其他可能遇到此问题的人使用。

    //Load Sound Button
    final View loader = findViewById(R.id.load_button);
    loader.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent loadIntent = new Intent();
            loadIntent.setAction(ACTION_GET_CONTENT);
            loadIntent.setType("audio/*");
            startActivityForResult(createChooser(loadIntent, "Select Audio"), SOUND_LOAD_REQUEST);}
    });

    //End of Load Sound Button

&安培;

//Start of onActivityResult
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == SOUND_LOAD_REQUEST)
            if (resultCode == RESULT_OK) {
                mediaPlayer.reset();
                Uri soundUri = data.getData();  Log.i(TAG, "Intent data" + data.getData().toString());
                try {
                    mediaPlayer.setDataSource(this, soundUri);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                    mediaPlayer.prepareAsync();

                //Play Sound Button
                final View mrButton = findViewById(R.id.push_button);
                mrButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                    if(mediaPlayer.isPlaying()){
                        mediaPlayer.pause();
                    }else{
                        mediaPlayer.start();
                    }
                }
            });
            //End of Play Sound Button
        }
}

//End of onActivityResult

快乐编码