音频流无法在setOnItemClickListener上播放

时间:2018-10-08 11:59:19

标签: java android

这是MainActivity.java

lv_tracks.setOnItemClickListener(new AdapterView.OnItemClickListener() {

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

    Resources res = getResources();
    String[] links = res.getStringArray(R.array.links);
    String url = links[position];
    try {
        mMediaPlayer.setDataSource(url);
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        mMediaPlayer.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mMediaPlayer.start();

}});

我需要播放放置在String数组中的数据源。 像这样:

<string-array name="links">
    <item>http://210.56.24.230:8006/</item>
    <item>http://210.56.24.230:8044/</item>
    <item>http://210.56.24.230:8034/</item>
</string-array>

但是这里的问题是:

  • 我听不到任何声音。也许它没有播放。
  • 选择特定列表项时,每个都有三个链接。我做对了吗?

1 个答案:

答案 0 :(得分:0)

以下代码在我以前的项目中运行良好,您可以尝试这种方式!

 public static MediaPlayer mp;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    lv= (ListView)findViewById(R.id.lv);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

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

                if(mp==null){
                    mp= new MediaPlayer();
                }else{
                    if(mp.isPlaying()){
                        mp.stop();
                    }
                }
                //Strat Loading
                mp.setDataSource(CarsActivity.this,
                        Uri.parse(getResources().getStringArray(R.id.arr)[position]));

                mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mp.start();
                        //Dismiss Loading
                    }
                });
                mp.prepareAsync();

            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SecurityException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }});
   }