我正在android工作室製作一個小型遊戲,當用戶與應用程序進行交互(並在設置中打開它)時,我想要播放背景音樂。爲此,我使用了一個用於播放backgroundmusic的服務。正如你可以看到下面如何在活動之外停止服務?
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class BackgroundMusicService extends Service {
MediaPlayer player;
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.backgroundmusic);
player.setLooping(true); // Set looping
}
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return 1;
}
@Override
public void onDestroy() {
player.stop();
player.release();
}
@Override
public void onLowMemory() {
}
}
我希望我的backgroundmusic對我所有的活動中發揮,但是當用戶離開應用程序,停止,因爲它是不可能檢測菜單按鈕按下或home鍵按下的機器人。我試圖解決這個問題。
import java.util.Timer;
import java.util.TimerTask;
public class LeaveAppDetector extends BackgroundMusicService{
private boolean Deactivated;
private int Time = 700;
private int wait = 0;
private Timer timer = new Timer();
public void Activate() {
Deactivated = false;
timer.schedule(new TimerTask() {
@Override
public void run() {
if (wait >= 1) {
if (!getDeactivate()) {
//app has been closed
StopPlaying();
StopTimer();
} else {StopTimer();} //app has not been closed
}
wait++;
}
}, Time);
}
public void Deactivate() { //call at the start of each activity
Deactivated = true;
}
private boolean getDeactivate() {
return Deactivated;
}
private void StopTimer() {
if (timer != null) {
timer.cancel();
timer.purge();
}
}
}
這個想法是,當一個活動開始時,它會調用Deactivate();當它關閉時,它會調用Activate();以便激活的值在短時間內更新。我添加下面的方法來我BackgrondMusicService類,以便能夠將其關閉遠程
public void StopPlaying() {
player.stop();
player.release();
}
現在的問題,它給我的錯誤的參考方法我只是表明mediaplayers,是一個指的是一個空對象,我不知道爲什麼或爲什麼它不起作用。有人可以幫忙嗎?
嘗試從'Activity'的'onDestroy'或'onPause'方法停止服務,並在'onCreate'或'onResume'中啓動它。 –
您可以將您的服務註冊到'BroadcastReceiver'並註冊您每次輸入設置時發送的自定義意圖,或者用戶與UI進行交互。這是我用來發送操作到服務的內容。 –