Java 在媒体播放器上实现后台服务
我正在尝试在运行web收音机的媒体播放器上实现后台服务。但我是java/Android编程的初学者,无法实现我所看到的示例代码 这是我的MainActivity.java:Java 在媒体播放器上实现后台服务,java,android,android-service,android-mediaplayer,Java,Android,Android Service,Android Mediaplayer,我正在尝试在运行web收音机的媒体播放器上实现后台服务。但我是java/Android编程的初学者,无法实现我所看到的示例代码 这是我的MainActivity.java: public class MainActivity extends AppCompatActivity { Button button_play; boolean prepared = false; boolean started = false; String Stream = "UrlFr
public class MainActivity extends AppCompatActivity {
Button button_play;
boolean prepared = false;
boolean started = false;
String Stream = "UrlFromWebRadio";
// in my case i use http://wz5.dnip.com.br/litoral/litoral.stream/playlist.m3u8
MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_play = findViewById(R.id.button_play);
button_play.setEnabled(false);
button_play.setText("Loading");
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
new PlayerTask().execute(Stream);
button_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(started){
started = false;
mediaPlayer.pause();
button_play.setText("Play");
}
else{
started = true;
mediaPlayer.start();
button_play.setText("Stop");
}
}
});
}
class PlayerTask extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... strings){
try{
mediaPlayer.setDataSource(strings[0]);
mediaPlayer.prepare();
prepared = true;
}
catch (IOException e){
e.printStackTrace();
}
return prepared;
}
@Override
protected void onPostExecute(Boolean aBoolean){
super.onPostExecute(aBoolean);
button_play.setEnabled(true);
button_play.setText("Play");
}
}
@Override
protected void onPause(){
super.onPause();
if(started){
mediaPlayer.pause();
}
}
@Override
protected void onResume() {
super.onResume();
if(started){
mediaPlayer.start();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(prepared){
mediaPlayer.release();
}
}
}
这就是我目前拥有代码的方式,main活动就是这样工作的。现在想实现后台服务。但我不能用我现在看到的例子,可能是因为缺乏知识。有人能帮忙吗?你必须使用Android服务 从文档中: “服务是一种应用程序组件,表示应用程序希望在不与用户交互的情况下执行较长时间的运行操作,或提供供其他应用程序使用的功能。” 以下是使用服务入门的优秀官方指南: 开始有粘性 如果系统在onStartCommand()返回后终止服务,请重新创建该服务并调用onStartCommand(),但不要重新传递最后的意图。相反,除非有启动服务的挂起意图,否则系统将以null意图调用onStartCommand()。在这种情况下,这些意图就实现了。这适用于不执行命令但无限期运行并等待作业的媒体播放器(或类似服务)
public class WebRadioService extends Service{
MediaPlayer mediaPlayer;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
Toast.makeText(this, "Service Created", Toast.LENGTH_SHORT).show();
//
// mediaPlayer = MediaPlayer.create(this, R.drawable.test);
// the line above will play specific file
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();
mediaPlayer.start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
Toast.makeText(this, "Service Finalized", Toast.LENGTH_SHORT).show();
mediaPlayer.release();
}
}