13

BGM付きのゲームアプリを作っています。アクティビティを変えながらBGMを流したかったので、Android Serviceを使ってBGMを流しました。私の問題は、各アクティビティの onPause メソッドで finish() を宣言したことです (ユーザーに戻ってアクティビティを強制終了させたくない)。

そのため、他のアクティビティを意図すると、onDestroy が呼び出されてサービスが停止します。サービスを正確に停止したい (ホームボタンを押す) アプリを終了し、onPause() で BGM と finish() を使用してアクティビティを実行したい。これは可能ですか? または別の解決策がありますか?

public class BackgroundMusicService extends Service {
    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.topbgm);
        player.setLooping(true); // Set looping
        player.setVolume(100, 100);
    }

    public int onStartCommand(Intent intent, int flags, int startId) {
        player.start();
        return 1;   
    }

    public void onStart(Intent intent, int startId) {
        // TO DO

    }

    public IBinder onUnBind(Intent arg0) {
        // TO DO Auto-generated method
        return null;
    }

    public void onStop() {

    }

    public void onPause() {

    }

    @Override
    public void onDestroy() {
        player.stop();
        player.release();
        Log.i("service", "service killed");
    }

    @Override
    public void onLowMemory() {

    }
}

マニフェストで

<service android:name=".BackgroundMusicService" android:process=":remote" />
4

3 に答える 3

17

この行をあなたの活動に入れます

stopService(new Intent(this, BackgroundMusicService.class));

ホームボタンを押す onDestroy() メソッドで。

于 2013-02-13T05:08:51.287 に答える
2

stopService(new Intent(this, BackgroundMusicService.class));

これをメイン アクティビティのonPause()メソッドとメソッドに追加します。onDestroy()ボタンを押すHomeと、アプリはランダムな時間バックグラウンドになりonDestroy()、アプリを最小化するとすぐにメソッドが呼び出されないためです。それを行う最良の方法は、メソッドに入れることonPause()です。onPause()メソッドは、アプリケーション アクティビティがフォアグラウンド アクティビティでない場合に呼び出されます。

于 2013-02-13T05:38:04.733 に答える
0

Service のメソッド onUnbind(Intent intenet) をオーバーライドする

于 2013-11-11T10:02:11.727 に答える