gpt4 book ai didi

java - 启动一个 Activity 会停止 Android 服务

转载 作者:行者123 更新时间:2023-12-01 14:43:27 26 4
gpt4 key购买 nike

我有一个播放音乐的 Android 服务。我使用以下代码开始我的主要 Activity :

Intent service = new Intent(MainMenu.this, musicservice.class);
MainMenu.this.startService(service);

这是我的服务:

public class musicservice extends Service {
@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);

MediaPlayer mp;
mp = MediaPlayer.create(musicservice.this, R.raw.music);
mp.setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
mp.start();

return Service.START_STICKY;
}

@Override
public void onDestroy() {
super.onDestroy();
}

}

它工作正常,但是当我开始另一项 Activity 时,我的音乐响起,似乎我的服务被破坏了!但不希望这样,我希望我的服务仅在我的应用程序结束时停止。仅当用户使用应用程序时才播放音乐。即使应用程序在后台运行,我也希望我的音乐不播放!我如何实现这个?

最佳答案

如果您希望应用程序在 Activity 进行时播放音乐,请尝试 bind it .

它应该看起来像这样:

服务:

package com.example.service;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Binder;
import android.os.IBinder;

import com.example.playmusic.R;

public class PlayMusicService extends Service {

private final IBinder binder = new LocalBinder();

private MediaPlayer player;

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

public class LocalBinder extends Binder {

public PlayMusicService getService() {
return PlayMusicService.this;
}
}

public void play() {
player = MediaPlayer.create(this, R.raw.music);
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
player.start();

}

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

Activity :

package com.example.playmusic;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;

import com.example.service.PlayMusicService;
import com.example.service.PlayMusicService.LocalBinder;

public class MainActivity extends Activity {

private PlayMusicService service;

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

@Override
protected void onPause() {
super.onPause();
service.pause();
}

@Override
protected void onStart() {
super.onStart();
if (service != null) {
service.play();
} else {
bindService();
}
}

private void bindService() {
bindService(new Intent(this, PlayMusicService.class), new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName name) {
service = null;

}

@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
LocalBinder localBinder = (LocalBinder) binder;
service = localBinder.getService();
service.play();

}
}, Context.BIND_AUTO_CREATE);
}

}

关于java - 启动一个 Activity 会停止 Android 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15708061/

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