2

音楽を再生するサービスを備えたアプリがあります。これは、サービスが進行し続ける (したがって再生される) ため、機能しています。

ただし、ユーザーが任意のアクティビティでホーム キーを押すと、アプリケーションがアイドル状態かどうかを検出できるはずです。私が見つけたすべての質問には、「onPause()またはonStop()を使用してください」のような回答がありますが、それは1つのアクティビティに対してのみ機能し、すべてのアクティビティにコードをコピーすることは汚い解決策のようです.

私の主に私は試しました:

  1. onDestroy: ホーム キーが押されたときに機能しません。
  2. onPause: 別のインテントを開始しても音楽を停止します (意図していません)。

メインから現在のアクティビティを検出することを検討しましたが、それはあまりにも汚い解決策です。

私の主な活動では、サービス (backgroundMusicPlayer) を開始します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
        setContentView(R.layout.activity_main);
    else
        setContentView(R.layout.activity_main_landscape);
    //_________BRON(MediaPlayer): http://stackoverflow.com/questions/3369068/android-play-sound-on-button-click-null-pointer-exception
    backgroundMusicPlayer = new Intent(MainActivity.this, BackgroundMusicPlayer.class);
    startService(backgroundMusicPlayer);

    mp = MediaPlayer.create(MainActivity.this, R.raw.buttonclick); //knopgeluiden laden
    super.onCreate(savedInstanceState);
}

私は何をすべきか?

4

1 に答える 1

0

知っておく必要があるのは、アクティビティがバックグラウンドにあるとき (および戻ってきたとき) です。これを行うにはいくつかの方法がありますが、私が見つけた信頼できる方法は、この回答に基づいていました。

これは、アクティビティ遷移間の時間参照を使用することで、アプリが「バックグラウンド化」されているかどうかの十分な証拠が得られる可能性が高いという前提で機能します。

これは私にとってはうまくいきました。コールバックでは、サービスに必要なことを確実に伝えることができます。

また、アプリがバックグラウンドになり、プレイしている場合は、サービスでフォアグラウンドを開始し (優先度が高くなるように)、アプリが戻ったらフォアグラウンドを停止する必要があります。

こうすることで、ユーザーがアプリを操作している場合でも、常にフォアグラウンド サービスを使用することを回避できます。

于 2013-11-01T00:30:45.140 に答える