Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在媒体播放器上实现后台服务_Java_Android_Android Service_Android Mediaplayer - Fatal编程技术网

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

我正在尝试在运行web收音机的媒体播放器上实现后台服务。但我是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();
        }
    }
}

这就是我目前拥有代码的方式,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();
    }
}