3 つのアクティビティ (メニュー、設定、ランキング リスト) が 1 つのバックグラウンド ミュージックを必要とするシンプルなゲームを開発しています。たとえば、ユーザーがメニューを離れて設定に戻った場合でも、バックグラウンドでスムーズに再生する必要があります。
そのために、完璧に機能するサービスを作成しました。大きな問題が 1 つだけあります。アプリを閉じても (ユーザーがホーム ボタンを押すなど)、音楽の再生が停止しません。
onDestroy、onStop、onPause を試しましたが、問題は解決しません。
サービス:
package com.android.migame;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.IBinder;
public class Meni_music extends Service implements OnCompletionListener {
private static final String TAG = null;
MediaPlayer player;
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.menu);
player.setLooping(true); // Set looping
}
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return 1;
}
public IBinder onUnBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
player.stop();
player.release();
stopSelf();
}
@Override
public void onLowMemory() {
}
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
}
}
メニュー:
package com.android.migame;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class Meni extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.meni);
startService(new Intent(Meni.this,Meni_music.class));
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
}