媒体播放器停止并重播不同的网址

时间:2015-08-21 20:33:04

标签: android-fragments android-service media-player android-mediaplayer

我正在学习实施媒体播放器服务。 MediaPlayerFragment有3个url_selection按钮和一个播放/停止按钮。使用url_selection按钮,我设置了setDataSource的URL。如果播放/停止按钮是停止或播放媒体播放器。

首先点击url_selection并点击播放/停止按钮将播放并更改图标。如果再次单击播放/停止按钮或单击其他url_selection,则应停止播放并播放/停止显示停止图标。

播放停止和网址选择正在运行但是。一旦媒体播放器停止,对于另一个网址,我将获得非法例外。这可能是因为我正在调用player.reset,player = null。但如果我不这样做,则player.setDataSource失败。 以下是实施片段:

    public static MediaPlayer player = new MediaPlayer();

public int onStartCommand(Intent intent, int flags, int startid) {
    Toast.makeText(this, "started service", Toast.LENGTH_LONG).show();

    try {
        Log.e("player_status", "" + player);
        String url = intent.getStringExtra("URL_NAME");
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.reset();
        player.setDataSource(url);
        player.prepareAsync();
        player.setOnPreparedListener(this);
        player.setOnErrorListener(this);
        player.setOnCompletionListener(this);

    } catch (Exception e) {
        // TODO: handle exception
        Log.e("start", "" + e);
    }
    return START_STICKY;

@Override
public int onStartCommand(Intent intent, int flags, int startid) {
    Toast.makeText(this, "started service", Toast.LENGTH_LONG).show();

    try {
        Log.e("player_status", "" + player);
        String url = intent.getStringExtra("URL_NAME");
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.reset();
        player.setDataSource(url);
        player.prepareAsync();
        player.setOnPreparedListener(this);
        player.setOnErrorListener(this);
        player.setOnCompletionListener(this);

    } catch (Exception e) {
        // TODO: handle exception
        Log.e("start", "" + e);
    }
    return START_STICKY;
}

@Override
public void onPrepared(MediaPlayer mp) {
    // TODO Auto-generated method stub
    try {
        player.start();
    } catch (Exception e) {
        // TODO: handle exception
        Log.e("onPrepare", "" + e);
    }
}

我在一些无法识别的地方做错了。如果没有播放,则单击播放/停止应播放(如果没有单击url_section,则首次播放url1),如果播放则应停止播放。在播放/停止状态下,url_selection应该停止媒体播放器。用户应再次单击播放/停止按钮以使用所选网址启动播放器。

不在stop中赋值null会在setDataSource()中出现错误,并设置null偏离当然抛出异常。

0 个答案:

没有答案