【问题标题】:seek bar not working when playing mp3 song from server从服务器播放 mp3 歌曲时搜索栏不工作
【发布时间】:2017-11-24 10:49:45
【问题描述】:

在我的应用程序中,我尝试从服务器播放媒体播放器以及搜索栏。当我尝试从服务器播放歌曲时,我的应用程序运行良好,但搜索栏没有移动!另外,搜索栏不工作....

没有显示 MediaPlayer 进度

另外,它正在同时播放多首歌曲

需要解决 2 个错误

Here is a screenshot of that app

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

}

【问题讨论】:

  • 您使用什么协议进行流式传输? HTTP?如果是这样,您的服务器是否支持范围请求?您应该知道,在任何情况下,常规 MP3 流都没有内置时间戳。查找 MP3 文件需要根据文件的平均比特率和字节大小进行一些猜测。 (当然,直到整个文件被下载和解码。)
  • 嗨!是的 !我正在使用 HTTP .....我的歌曲播放流畅......但问题是我无法将搜索栏与我的歌曲同步......除了搜索栏外一切正常......我需要获取歌曲持续时间并与搜索栏匹配...
  • 您忘记回答一个关键问题...您的服务器是否支持范围请求?即使是这样,您也无法使用纯 MP3 文件获得确切的持续时间。
  • 不!它不支持范围请求......
  • 给我一个代码示例,我可以用它来获取持续时间...

标签: mp3 android-mediaplayer media progress android-seekbar


【解决方案1】:

你必须在你的活动上使用搜索栏监听器。

seekBar.setOnSeekBarChangeListener(new >SeekBar.OnSeekBarChangeListener() { @覆盖 public void onProgressChanged(SeekBar seekBar, int >progress, 布尔 fromUser) { 如果(来自用户){ mPlayer.seekTo(进度); } }

【讨论】:

  • 欢迎来到 Stack Overflow!感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
  • 你能解释一下吗?我应该在哪里写?我该如何设定进度?详细解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
相关资源
最近更新 更多