繁体   English   中英

如何使用MusicPlayService播放音乐

[英]How to play music using MusicPlayService

我是一名学生,刚开始学习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;
    }

}

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

您的代码似乎很好,或许您可以为您的Manifest添加服务?

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

[

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

]

试试这个:

1:代码

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

你可以试试

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM