【问题标题】:Mediaplayer - All songs are playing at the same time - Other song is not getting stoppedMediaplayer - 所有歌曲同时播放 - 其他歌曲没有停止
【发布时间】:2017-12-03 17:32:30
【问题描述】:

我正在尝试在我的应用程序中播放音乐(来自 url /server)。我在那里列出了 2 首歌曲。一切正常。除了一个问题。所有歌曲同时播放...我只想播放一首歌曲。我重复所有歌曲都同时播放。

这是该应用程序的屏幕截图

import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;

import java.io.IOException;
import java.util.ArrayList;

public class MainActivity2 extends AppCompatActivity {

    private ArrayList<SongInfo> _songs = new ArrayList<SongInfo>();
    RecyclerView recyclerView;
    SeekBar seekBar;
    SongAdapter songAdapter;
    MediaPlayer mediaPlayer;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        seekBar = (SeekBar) findViewById(R.id.seekBar);


        SongInfo s = new SongInfo("Cheap Thrills", "sia", "http://176.126.236.250/33Mmt/music/hindi/movies/new/oh_my_god/Go-Go-Govinda_(webmusic.in).mp3");
        _songs.add(s);

        s = new SongInfo("Cheap Thrills", "sia", "http://176.126.236.250/33Mmt/music/hindi/movies/new/oh_my_god/Go-Go-Govinda_(webmusic.in).mp3");
        _songs.add(s);

        songAdapter = new SongAdapter(this, _songs);
        recyclerView.setAdapter(songAdapter);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
                linearLayoutManager.getOrientation());
        recyclerView.addItemDecoration(dividerItemDecoration);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(songAdapter);


        songAdapter.setOnItemClickListener(new SongAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(final Button b, View view, SongInfo obj, int position) {
                try {
                    if (b.getText().toString().equals("stop")) {
                        b.setText("Play");
                        mediaPlayer.stop();
                        mediaPlayer.reset();
                        mediaPlayer.release();
                        mediaPlayer = null;
                    }else {
                        mediaPlayer = new MediaPlayer();
                        mediaPlayer.setDataSource(obj.getSongUrl());
                        mediaPlayer.prepareAsync();
                        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                            @Override
                            public void onPrepared(MediaPlayer mp) {
                                mp.start();
                                b.setText("stop");
                            }
                        });
                    }

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

    }

}

这是我的歌曲适配器代码 -:

package com.a03.dip.kaliprasadbengalisongs;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;

public class SongAdapter extends RecyclerView.Adapter<SongAdapter.SongHolder> {

    ArrayList<SongInfo> _songs;
    Context context;

    OnItemClickListener mOnItemClickListener;

    SongAdapter(Context context, ArrayList<SongInfo> songs) {
        this.context = context;
        this._songs = songs;
    }

    public interface OnItemClickListener {
        void onItemClick(Button b ,View view, SongInfo obj, int position);
    }

    public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
        this.mOnItemClickListener = mItemClickListener;
    }

    @Override
    public SongHolder onCreateViewHolder(ViewGroup viewGroup, int i) {

        View myView = LayoutInflater.from(context).inflate(R.layout.row_song,viewGroup,false);
        return new SongHolder(myView);
    }

    @Override
    public void onBindViewHolder(final SongHolder songHolder, final int i) {
        final SongInfo c = _songs.get(i);
        songHolder.songName.setText(_songs.get(i).songName());
        songHolder.artistName.setText(_songs.get(i).artistName());
        songHolder.btnAction.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mOnItemClickListener != null) {
                    mOnItemClickListener.onItemClick(songHolder.btnAction,v, c, i);
                }
            }
        });
    }

    @Override
    public int getItemCount() {

        return _songs.size();
    }

    public class SongHolder extends RecyclerView.ViewHolder {
        TextView songName,artistName;
        Button btnAction;

        public SongHolder(View itemView) {
            super(itemView);
            songName = (TextView) itemView.findViewById(R.id.tvSongName);
            artistName = (TextView) itemView.findViewById(R.id.tvArtistName);
            btnAction = (Button) itemView.findViewById(R.id.btnPlay);

        }
    }
}

这里是 songInfo 类 -----

package com.a03.dip.kaliprasadbengalisongs;

import android.media.MediaPlayer;

public class SongInfo {
        public String songName ,artistName,songUrl;

    public SongInfo() {
    }

    public SongInfo(String songName, String artistName, String songUrl) {
        this.songName = songName;
        this.artistName = artistName;
        this.songUrl = songUrl;
    }

    public String songName() {
        return songName;
    }

    public String artistName() {
        return artistName;
    }

    public String getSongUrl() {
        return songUrl;
    }

}

【问题讨论】:

    标签: android android-mediaplayer media-player audio-player android-music-player


    【解决方案1】:

    是的!这是我的问题,我仍然想回答这个问题。经过大量研究,我找到了解决方案,我认为我应该通过答案分享它。

    所以,你要做的第一件事就是......

    1. 删除您添加的 main - 活动中的所有代码。另外,不要忘记删除其他 2 个类(songadapter 和 songInfo)

    2. 现在添加这个简单的代码来播放来自 url 的音频...

      公共类 PlayaudioActivity 扩展 Activity {

      private MediaPlayer mp;
      
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          Button b = (Button) findViewById(R.id.button1);
          Button b2 = (Button) findViewById(R.id.button2);
      
          b.setOnClickListener(new View.OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  stopPlaying();
                 mp.setDataSource("http://q.freesfx.co.uk/rx2/mp3s/9/10183_1367780535.mp3");
                // mediaPlayer.prepare();
                  mp.start();
      
      
      if (mediaPlayer.isPlaying()) {
              bPlay.setText(“Stop”);
              mediaPlayer.pause();
          }
          else {
              bPlay.setText(“Stop”);
              mediaPlayer.start();
          }
      
              }
      
          });
      

    通过这种方式,您可以添加更多歌曲并毫无问题地播放它们。希望这会帮助你。

    【讨论】:

      【解决方案2】:

      在 MainActivity2.java 中添加此代码。然后代码就可以正常工作了...

      private Button PREVIOUS_SONG = null;
      

      在里面添加这段代码

      songAdapter.setOnItemClickListener(new SongAdapter.OnItemClickListener() {
                  @Override
                  public void onItemClick(final Button b, View view, SongInfo obj, int position) {
                      try {
      
          if(PREVIOUS_SONG==null){
                          PREVIOUS_SONG=b;
      
      
                      }
                      else{
                          if(b!=PREVIOUS_SONG){
                              PREVIOUS_SONG.setText("Play");
                              PREVIOUS_SONG=b;
                          }
                      }
                          if (b.getText().toString().equals("stop")) {
                              if(mediaPlayer!=null)
                      {
                          mediaPlayer.stop();
                          mediaPlayer.reset();
                          mediaPlayer.release();
                          mediaPlayer = null;
                          b.setText("Play");
      
                          tvstartTime.setText("00:00");
                          tvEndTime.setText("00:00");}
                  }else {
      
                      if(mediaPlayer!=null)
                      {
                          mediaPlayer.stop();
                          mediaPlayer.reset();
                          mediaPlayer.release();
                          mediaPlayer = null;
      
      
                          tvstartTime.setText("00:00");
                          tvEndTime.setText("00:00");}
                      Runnable runnable = new Runnable() {
                              mediaPlayer = new MediaPlayer();
                              mediaPlayer.setDataSource(obj.getSongUrl());
                              mediaPlayer.prepareAsync();
                              mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                                  @Override
                                  public void onPrepared(MediaPlayer mp) {
                                      mp.start();
                                      b.setText("stop");
                                  }
                              });
                          }
      
                      } catch (IOException e) {
                      }
                  }
              });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        • 2015-03-09
        • 1970-01-01
        相关资源
        最近更新 更多