使用服务流式传输音频

iTu*_*rki 3 android android-service android-mediaplayer

请看看我的simple three-methods Service class流音频并直接播放.

public class StreamService extends Service {

    private static final String TAG = "MyService";
    String url;
    MediaPlayer mp;

    @Override
    public void onCreate() {
        Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onCreate");

        mp = new MediaPlayer();
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }

    @Override
    public void onDestroy() {
        Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onDestroy");

        mp.stop();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startid) {
        Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onStart");

        url = intent.getExtras().getString("url");
        try {
            mp.setDataSource(url);
            mp.prepare();
            mp.start();
        } catch(Exception e){}          
        return START_STICKY;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的活动中,我有两个按钮来播放/停止媒体文件:

现在,我有一些问题:

  1. 我该如何实现pauseButton?我想暂停在服务中运行的媒体
  2. 我的播放/停止媒体/服务的方式是否正确?有没有更好的方法?
  3. 我如何(定期)从我的服务更新我的活动用户界面?我需要添加一些东西吗?

Ald*_*ryd 9

我建议不要使用服务的生命周期来开始和停止播放.使用这种方法意味着每次想要启动新流时,必须通过启动新服务来减慢代码的速度.只需让相同的服务播放所有内容,您就可以节省一些时间.虽然这并不意味着它应该一直保持运行.

要实现这一点(并且能够暂停),您需要在启动后绑定到服务.使用绑定的服务,您将能够对其进行调用 - 例如暂停,播放,停止等.

以下是一些可以帮助您找到所需内容的链接: