Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 链接源未在MediaPlayer或SoundPool中播放_Android_Audio_Mp3_Audio Player - Fatal编程技术网

Android 链接源未在MediaPlayer或SoundPool中播放

Android 链接源未在MediaPlayer或SoundPool中播放,android,audio,mp3,audio-player,Android,Audio,Mp3,Audio Player,我想用MediaPlayer或SoundPool播放URL中的短声音,但当我尝试播放时什么也没发生 我有这个MP3链接格式:“ 我仔细检查了清单INTERNET、读、写存储中的权限。我读到这个错误:MediaPlayer﹕ 错误(1,-2147483648)和准备失败:状态=0x1 这个消息来源似乎有问题 15:03:42.259 17076-17076/com.soundbox E/libEGL﹕ call to OpenGL ES API with no current context (l

我想用MediaPlayer或SoundPool播放URL中的短声音,但当我尝试播放时什么也没发生

我有这个MP3链接格式:“

我仔细检查了清单INTERNET、读、写存储中的权限。我读到这个错误:MediaPlayer﹕ 错误(1,-2147483648)和准备失败:状态=0x1

这个消息来源似乎有问题

15:03:42.259 17076-17076/com.soundbox E/libEGL﹕ call to OpenGL ES API with no current context (logged once per thread) 03-03 
15:08:15.966 18139-18139/com.soundbox E/libEGL﹕ call to OpenGL ES API with no current context (logged once per thread) 03-03 
15:08:31.111 18139-18151/com.soundbox E/MediaPlayer﹕ error (1, -2147483648)
当我启动播放器时,我会出现准备错误

    public class MainActivity extends ActionBarActivity implements     AdapterView.OnItemClickListener, MediaPlayer.OnPreparedListener{

  private GridView mainGridview;
  private GridViewAdapter adapter;

  public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
  private ProgressDialog mProgressDialog;


  boolean plays = false, loaded = false;


  int counter;

  private MediaPlayer player;
  FileInputStream fis = null;


  private String[] soundArray;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainGridview = (GridView) findViewById(R.id.mainGridView);
    adapter = new GridViewAdapter(this);

    mainGridview.setAdapter(adapter);
    mainGridview.setOnItemClickListener(this);

    soundArray =  getResources().getStringArray(R.array.animalsSoundsUrls);

}

  private void play(Uri uri)
  {
    try{
        player = new MediaPlayer();
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.setDataSource(this, uri);
        player.prepare(); // prepare async to not block main thread
        player.start();
    }catch (IOException e)
    {
        e.printStackTrace();
    }

  }
  private void play(String url)
  {
    try{
        player = new MediaPlayer();
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.setDataSource(url);
        player.prepare(); // prepare async to not block main thread
        player.start();
    }catch (IOException e)
    {
        e.printStackTrace();
    }

  }

  @Override
  public void onPrepared(MediaPlayer mp) {
    player.start();
  }

  private void killMediaPlayer() {
    if(player!=null) {
        try {
            player.release();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
   }

   @Override
  public void onItemClick(AdapterView<?> parent, View view, int position,   long id) {

    killMediaPlayer();
    play(soundArray[position].toString());

}

@Override
protected void onDestroy() {

    killMediaPlayer();
    super.onDestroy();
}
}

这就是我过去从URL播放声音的方式

public void playSound(String url) {
        MediaPlayer mp = new MediaPlayer();
        try {
            mp.setDataSource(url);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            mp.prepare();
        } catch (IllegalStateException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
        mp.start();
    }
这将在下载过程中播放声音,就像youtube缓冲一样

完成下载后,以下功能将播放声音

public void playSoundAsync(String url) {
        MediaPlayer mp = new MediaPlayer();
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mp.setDataSource(url);
        } catch (IllegalArgumentException e) {

            e.printStackTrace();
        } catch (SecurityException e) {

            e.printStackTrace();
        } catch (IllegalStateException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
        mp.prepareAsync();
        mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.start();
            }
        });

    }

如果有帮助,请告诉我。

谢谢您的回答,但不幸的是,这两种方法都无效。我仍然得到这个错误:E/MediaPlayer﹕ 错误(1,-2147483648)。我把这个链接放在其他应用程序中,我很确定这个问题与链接格式有关。我测试了其他的.mp3链接,一切都正常。我不能找出错误,但我可以说我上面发布的功能毫无疑问会工作。是的,我知道你的方法与其他链接一起工作,这是一个非常容易理解和有用的代码。非常感谢。
public void playSoundAsync(String url) {
        MediaPlayer mp = new MediaPlayer();
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mp.setDataSource(url);
        } catch (IllegalArgumentException e) {

            e.printStackTrace();
        } catch (SecurityException e) {

            e.printStackTrace();
        } catch (IllegalStateException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
        mp.prepareAsync();
        mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.start();
            }
        });

    }