2

アプリに MediaPlayer クラスを実装していて、バックグラウンドで音楽を再生したいので、Activity または BroadcastReciever の代わりに Service を使用しました。問題は、ユーザーが存在するかアプリを一時停止すると、音楽が停止せずに再生されることです。onStop メソッドと onPause メソッドを追加しましたが、問題は解決しません。また、Activity クラスのように super.onPause() メソッドを呼び出すことはできません。

いくつかの調査の結果、アプリが一時停止または停止してもサービスがアクティブなままであることがわかりました(これが本当かどうかはわかりません)が、私の経験ではこれは本当だと思います。私は何をすべきか?google と stackoverflow で答えを検索しましたが、答えが得られませんでした。

ここにコードがあります。

 package in.isuru.animation;

 import android.app.Service;
 import android.content.Intent;
 import android.media.MediaPlayer;
 import android.os.IBinder;
 import android.util.Log;

 public class PlayMusic extends Service{

private static final String TAG = null;
MediaPlayer player;

public void onCreate(){
    super.onCreate();
    Log.d(TAG, "Music service started onCreate()");
    player = MediaPlayer.create(this, R.raw.oh_holy_night);
    player.setLooping(true);
    //player.setVolume(100, 100);
}

public int onStartCommand(Intent intent, int flags, int startId){
    player.start();
    Log.d(TAG, "Player started!");
    if(player.isLooping() != true){
        Log.d(TAG, "Player not playing any file.");
    }
    return 1;
}

public void onStart(Intent intent, int startId){

}

public IBinder onUnBinder(Intent arg0){
    return null;
}

public void onStop(){
    player.stop();
    player.release();
}

public void onPause(){

    player.stop();
    player.release();

}

public void onDestroy(){
    player.stop();
    player.release();
    Log.d(TAG, "Player destroyed");
}

public void onLowMemory(){
    player.release();
}

@Override
public IBinder onBind(Intent arg0) {

    return null;
}

}
4

2 に答える 2

3

まず第一に、BroadcastReceiver で長時間実行するオプションはありません。システムが気に入らないからです。だから私は少し混乱しています。バックグラウンドで音楽を再生したいので、サービスを使用しました。それは正しいです。しかし、ユーザーがあなたのアクティビティを終了または一時停止しても、音楽はまだ再生されていると言いますか? そうですね、それがそもそもサービスに入れる理由ではないでしょうか??

2 つのオプションがあります。アクティビティの onStart()/onResume() および onPause()/onStop() でメディア プレーヤーを開始および停止する呼び出しを移動できます。アクティビティにフォアグラウンドがある場合にのみ音楽が再生されます。

2 番目のオプションは、MediaPlaying をサービスに保持することです。ただし、サービスにインテントを送信して、音楽の再生をいつ停止するかを知らせる必要があります。これを行う最善の方法は、音楽を一時停止して再生するボタンを持つアクティビティを開始する通知マネージャーに渡す PendingIntent をまとめることです。サービスを制御するアクティビティにユーザーが戻る方法を提供しない場合、音楽は最後まで再生され、ユーザーはそれをオフにする適切な方法がありません。

于 2012-06-22T20:40:56.840 に答える