在Service Android

时间:2017-01-20 16:45:18

标签: android service android-mediaplayer

我在Android中创建了一个音乐播放器应用,我尝试将MediaPlayer设置为服务,以便它可以在所有活动/片段中保留。服务代码:

public class PlayerService extends Service {

MediaPlayer mediaPlayer;

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    mediaPlayer = new MediaPlayer();

}

public void LoadUrl(String url){

    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mediaPlayer.setDataSource(url);
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        mediaPlayer.prepare();
    }  catch (IOException e) {
        e.printStackTrace();
    }
    //mediaPlayer.start();
    Play(mediaPlayer);
}

public void Play(MediaPlayer player) {
    player.start();
}

public void Pause(MediaPlayer player) {
    player.pause();
}

}

和MainActivity:

public class MainActivity extends AppCompatActivity {

PlayerService playerService;

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

    if(savedInstanceState != null){

    } else {

         playerService = new PlayerService();
        Intent startPlayer = new Intent(this, PlayerService.class);
        startService(startPlayer);

   ....

当MainActivity启动时,它会启动该服务,但是,当我尝试使用以下内容将Url加载到MediaPlayer中时:

 playerService.LoadUrl(feedItem.getAudioUrl());

我得到一个例外,说服务中的mediaPlayer为空。如何确保保留mediaPlayer?

1 个答案:

答案 0 :(得分:0)

您正在尝试使用startService启动服务而不使用onStartCommand服务,否则服务将无法启动。所以你的媒体播放器不会被初始化