如何使用MusicPlayService播放音乐

时间:2018-08-07 07:18:58

标签: java android service media-player

我是一名学生,刚开始学习java和android(目前使用android studio)。我一直在关注视频流和音乐流的教程。但我目前正在关注音乐流。

代码很好,但是问题是它不会播放音乐。也没有错误表明我错过了程序中的任何内容。它正在模拟器上运行,但不会播放音乐。

下面是我的MainActivity.java代码:

package com.name.package.yb;

import android.content.pm.ActivityInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.widget.Toast;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;


public class MainActivity extends AppCompatActivity {

    private Button btnPlayStop;
    private boolean boolMusicPlaying = false;
    Intent myService;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try{
            myService = new Intent(MainActivity.this, MusicPlayService.class);
            initViews();
            setListeners();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), e.getClass().getName() + " " + e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }

    private void initViews() {
        btnPlayStop = (Button) findViewById(R.id.myButton);
        btnPlayStop.setText("Stream Music");
    }

    private void setListeners() {
        btnPlayStop.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                btnPlayStopClick();
            }
        });
    }

    private void btnPlayStopClick() {
        if (!boolMusicPlaying) {
            btnPlayStop.setText("Pause Streaming");
            playAudio();
            boolMusicPlaying = true;
        } else {
            if(boolMusicPlaying){
                btnPlayStop.setText("Play Stream");
                stopPlayService();
                boolMusicPlaying = false;
            }
        }
    }

    private void stopPlayService() {
        try {
            stopService(myService);
        } catch (Exception e){
            e.printStackTrace();
            Toast.makeText(getApplicationContext(),
                    e.getClass().getName() + " " + e.getMessage(),
                    Toast.LENGTH_LONG).show();
        }
        boolMusicPlaying = false;
    }

    private void playAudio() {
        try {
            startService(myService);
        } catch (Exception e) {
            e.printStackTrace();
           Toast.makeText(getApplicationContext(),e.getClass().getName() + " " + e.getMessage(),Toast.LENGTH_LONG).show();
        }
    }
}

“我的服务”名为MusicPlayService.java(我想像手机上的音乐播放器一样在后台播放音乐):

package com.name.package.yb;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.widget.Toast;
import java.io.IOException;


public class MusicPlayService extends Service  {

    private MediaPlayer mediaPlayer = new MediaPlayer();
    private static final String AUDIO_STRING = "http://musicsite.streammusic.com/file";

    @Override
    public void onCreate(){
        super.onCreate();
        //mediaPlayer.setOnCompletionListener(this);
        //mediaPlayer.setOnPreparedListener(this);
        mediaPlayer.setVolume(100,100);
        //mediaPlayer.reset();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId){
        if (!mediaPlayer.isPlaying()) {
            try {
                mediaPlayer.setDataSource(AUDIO_STRING);
                // Prepare mediaplayer
                mediaPlayer.prepareAsync();
                mediaPlayer.start();

            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
            }
        }
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if(mediaPlayer != null) {
            if (mediaPlayer.isPlaying()) {
                mediaPlayer.stop();
            }
            mediaPlayer.release();
        }
    }

    public IBinder onBind(Intent arg0) {
        return null;
    }

    public IBinder onUnBind(Intent arg0) {
        return null;
    }

}

P.S apk已成功安装在模拟器中,并且可单击按钮。它只是不会播放音乐。

3 个答案:

答案 0 :(得分:0)

您的代码看起来不错,也许您要在清单中添加服务?

<service android:enabled="true" android:name=".MusicPlayService" />

[

欢迎使用Android进行编程,调试Android代码的最佳方法是在代码中添加日志。您可以使用Log.d,Log.e等来打印通过方法传递的变量的值。

]

答案 1 :(得分:0)

尝试一下:

1:代码

mediaPlayer = MediaPlayer.create(this, Uri.parse("http://vprbbc.streamguys.net:80/vprbbc24.mp3"));
mediaPlayer.start();

答案 2 :(得分:0)

您可以尝试

mediaPlayer.setDataSource(AUDIO_STRING);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.start();
            }
        });

如果您在线播放音乐,则还需要获得INTERNET的权限;如果要播放内存中的音乐,则还需要READ_EXTERNAL_STORAGE。