带有流式音频的 Android 搜索栏

标签 android streaming media-player audio-streaming seekbar

我目前有一个播放 mp3 的媒体播放器。我有一个搜索栏,但是,它不工作。我已经用一个实际的原始文件试过了,这似乎有效。我认为搜索栏没有得到歌曲的持续时间。有什么想法吗?

代码:

public class SeekMe extends Activity implements Runnable{
    /** Called when the activity is first created. */
    MediaPlayer mp; 
    Button playButton;
    Button stopButton;
    SeekBar seekMe; 
    int total;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    playButton = (Button)findViewById(R.id.play);
    stopButton = (Button)findViewById(R.id.stop);
    seekMe = (SeekBar)findViewById(R.id.seekBar1);

    final MediaPlayer mp = new MediaPlayer();

    try {
        mp.setDataSource("http://dl.dropbox.com/u/24535120/Week%20of%20May%201/Swanky%20Tunes%20%26%20Hard%20Rock%20Sofa%20-%20Smolengrad%20%28Original%20Mix%29.mp3");
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mp.prepareAsync();
    } catch (IllegalArgumentException 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();
    }

    mp.setOnPreparedListener(new OnPreparedListener(){

        @Override
        public void onPrepared(MediaPlayer arg0) {
            // TODO Auto-generated method stub
            total = mp.getDuration();
        }

    });

    seekMe.setProgress(0);


    playButton.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View arg0) {
            mp.start();
            seekMe.setMax(total);

        }

    });

    stopButton.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View arg0){
            mp.pause();
        }
    });

    seekMe.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub

            if(fromUser){
                mp.seekTo(progress);
                seekMe.setProgress(progress);
            }

        }
    });

    Thread currentThread = new Thread(this);
    currentThread.start();


}

@Override
public void run() {
    // TODO Auto-generated method stub

    try{
        while(mp != null){
            int currentPosition = mp.getCurrentPosition();
            Message msg = new Message();
            msg.what = currentPosition;
            threadHandler.sendMessage(msg);
        }
        Thread.sleep(100);
    }catch (InterruptedException e){
        e.printStackTrace();
    }
}

private Handler threadHandler = new Handler(){
    public void handleMessage(Message msg){
        seekMe.setProgress(msg.what);
    }
};

最佳答案

您是否尝试过使用 mp3 文件的 url 调用默认音乐播放器?

Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse(url), "audio/*");
context.startActivity(i);

关于带有流式音频的 Android 搜索栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6619761/

相关文章:

android - 通过模拟器发送电话号码

android - 使用 WakeLock 保持流播放

android widget 和 localservice 绑定(bind)

android - 如何更改最后一个 ListView 适配器索引的颜色

java - 一旦标题栏消失,按钮选框就会停止(帮助)

java - 如何保存checkedTextViews的文本

kotlin - MediaButtonReceiver.buildMediaButtonPendingIntent() 给出目标 S+(版本 31 及更高版本)需要 FLAG_IMMUTABLE 或

audio - 使用 FFMPEG 将 16 channel 音频输入源拆分为 4 个单独的 4 channel 音频源以进行流式传输

WCF Streaming 无法传输大文件

javascript - 绕过观看多个视频的 6 次下载限制