gpt4 book ai didi

java - 在媒体播放器上实现后台服务

转载 作者:行者123 更新时间:2023-11-29 23:00:16 25 4
gpt4 key购买 nike

我正在尝试在运行网络广播的媒体播放器上实现后台服务。但是我是 java/Android 编程的初学者,我无法实现我作为示例看到的代码。

这是我的 MainActivity.java:

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();
}
}
}

这是我的服务示例类 (WebRadioService.java):

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();
}
}

这就是我目前的代码,以及 MainActivity 的工作方式。现在想实现后台服务。但是我不能用我现在看到的例子,可能是因为缺乏知识。有人可以帮忙吗?

最佳答案

您必须使用一种叫做 Android 服务的东西。

来自文档:

“服务是一种应用程序组件,代表应用程序希望在不与用户交互的情况下执行长时间运行的操作,或者为其他应用程序提供功能以供使用。”

START_STICKY

如果系统在 onStartCommand() 返回后终止服务,则重新创建服务并调用 onStartCommand(),但不要重新传递上一个 Intent 。相反,系统调用 onStartCommand() 时带有一个空 Intent ,除非有未决的 Intent 来启动服务。在那种情况下,这些 Intent 被传递。这适用于不执行命令但无限期运行并等待作业的媒体播放器(或类似服务)。

关于java - 在媒体播放器上实现后台服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57041888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com