请看一下我的简单的三方法服务类
,它可以流式传输音频并直接播放。
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;
}
}
在我的 Activity 中,我有两个按钮来播放/停止媒体文件:
playButton
执行此操作:Intent i = new Intent(this, StreamService.class); i.putExtra("my_mp3_url_string"); startService(i);
stopButton
执行此操作:stopService(new Intent(this, StreamService.class));
现在,我有一些问题:
- 如何实现
pauseButton
?我想暂停服务中运行的媒体 - 我播放/停止媒体/服务的方式是否正确?有没有更好的方法?
- 我如何(定期)从我的服务更新我的 Activity 的用户界面?我需要添加什么吗?
最佳答案
我建议不要使用服务的生命周期作为开始和停止播放的方式。使用这种方法意味着每次你想开始一个新的流时,代码会因为必须启动一个新的服务而变得更慢。您可以通过让相同的服务播放所有内容来节省一些时间。虽然这并不意味着它应该保留 running all the time .
要完成此操作(并能够暂停),您需要在服务启动后绑定(bind)到该服务。通过绑定(bind)服务,您将能够对其进行调用 - 例如暂停、播放、停止等。
这里有一些链接可以帮助您找到所需的内容:
关于android - 使用服务流式传输音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954990/