2

何百万通りも試しましたが、どの方法でも携帯の HOME ボタンを押しても音楽が流れ続けます。私の最後の試みはアプリケーションでしたが、私はまだ同じ問題を抱えています.

これは私のコードです。

public class ProvaMusica extends Application {
Intent musica_backGround;
public Background_music musicaDiBackground = new Background_music(); 

    public void avvia(){    
           //this is the class where i manage mediaplayer//////////
           musica_backGround=new Intent(this, Background_music.class); 
           startService(musica_backGround);
    }    


    public void onDestroy(){    
        stopService(musica_backGround);     
    }

}

私の最初のアクティビティでは、このコードを使用して音楽を開始します

 ProvaMusica appState = ((ProvaMusica)this.getApplication());
 appState.avvia();

では、他のアクティビティを表示しているときに音楽を再生し、アプリが表示されていないときに音楽を停止するにはどうすればよいですか?

アクティビティから別のアクティビティに移動している間も音楽を再生し続けたいのですが、新しいアクティビティが開始されたときに、音楽を停止してから再び開始したくはありません。

4

5 に答える 5

2

私がこれを行う方法は次のとおりです。

  1. SoundManager であるシングルトン クラスがあります。
  2. onPause では、各アクティビティが soundManager.stopPlayingDelayed を呼び出します。このメソッドは、1 秒または 2 秒で soundManager.checkIfShouldStop を呼び出すタイマーを開始します。また、lastCloseTime を現在の時刻に保存します。
  3. onResume の各アクティビティは、soundManager.startPlaying を呼び出します。すでに再生中の場合、サウンド マネージャーは要求を無視します。これにより、lastCloseTime もクリアされます
  4. checkIfShouldStop で、 lastCloseTime がゼロではなく、1 秒以上前の場合は、最後のアクティビティが終了した後、アプリの新しいアクティビティが開始されなかったことを意味するため、音楽を停止する必要があります。
于 2013-01-23T12:19:04.227 に答える
0

たぶん私はあなた方全員が私に与えた提案を混ぜ合わせる方法を見つけました。

このコードを使用すると、バックグラウンドミュージック(この場合はサービスで管理)は、ユーザーがバックボタンでアプリを閉じたとき、ユーザーがホームボタンでアプリを閉じたとき、およびユーザーがロックボタンで画面をロックしたために画面がオフになったときにのみ停止しますデバイスの。

これが正しいことを確認するために、私よりも専門的でプログラミングが得意な人が欲しいです。

このクラスでは、現在のアクティビティがフォアグラウンドにあるかどうかを確認します

public class GestioneApplicazioneInBackground{
    public static boolean applicazioneInBackground(final Context context) {
          ActivityManager am = (ActivityManager) MainActivity.context.getSystemService(Context.ACTIVITY_SERVICE);
          List<RunningTaskInfo> tasks = am.getRunningTasks(1);
          if (!tasks.isEmpty()) {
            ComponentName topActivity = tasks.get(0).topActivity;
            if (!topActivity.getPackageName().equals(context.getPackageName())) {
              return true;
            }
          }

          return false;
        }
}

私のすべての活動のonStop()およびonPause()メソッドで私はこのコードを持っています

/// if my app and his activities are in background i stop the service i started in my main/first activity////
    if(GestioneApplicazioneInBackground.applicazioneInBackground(this) ){
                      context_of_the_Intent.stopService(intent);    
                  }
                  else{
// if my app and his activities are NOT in background i check if user turned off the screen with the lock button of the device//////        
                    PowerManager kgMgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
                    boolean showing = kgMgr.isScreenOn();
                    if(!showing){
                         context_of_the_Intent.stopService(intent);     
                    }

                  }
于 2013-01-26T13:39:58.537 に答える
0

Applicationクラスを作成して に設定できますAndroidManifest。そのonDestroy()コールバックで、 function を使用stopService()してサービスを停止するか、 でサービスを開始しIntentて音楽を停止できます。

于 2013-01-23T12:12:40.397 に答える
0

これを使用してください:Tf you usr media player then Call this method in your activity...

MediaPlayer mp=null;

@Override
protected void onDestroy() {
    super.onDestroy();

    if (!(mp == null)) {
        if (mp.isPlaying()) {
            mp.stop();
            mp.release();
            mp = null;
        }
    }
};

v @Override
protected void onResume() {
    super.onResume();

    if (!(mp == null)) {
        if (mp.isPlaying()) {
            mp.stop();
            mp.release();
            mp = null;
        }
    }
};
于 2013-08-07T05:59:56.613 に答える
0

アプリは、Android オペレーティング システムのプロセスとして機能します。Android OS がプロセスを終了するにはさまざまな方法があり、プロセスが強制終了される前に onDestroy() などのコールバック関数が呼び出されないことがあります。したがって、サービスで音楽を開始して再生すると、プロセスが存続している限り音楽が再生されます。ただし、停止したい場合は、アプリの特定のアクティビティが強制終了されたときに、そのアクティビティの onDestroy() をオーバーライドし、サービスにメッセージをブロードキャストして音楽を停止することができます。これを実装するには、サービスを使用します。

于 2013-01-23T15:05:48.663 に答える