私のアプリケーションは、リモート サービスを使用してオーディオを再生します。これは、オーディオの再生を所有するアクティビティがないようにするためです。ユーザーは、1 つのアクティビティからオーディオの再生をトリガーでき、アプリ内を移動するときにオーディオが再生され続けます。ただし、ユーザーがバックアウト、ディスプレイのロック、または [ホーム] をクリックしてアプリを「アンロード」したときに、オーディオの再生を一時停止または停止するようにサービスに指示したいと考えています。アプリが単一のアクティビティだったとき、私は onPause でこれを行っていました。だから、私は本質的にアプリケーション/タスクレベルで「onPause」を探していると思います。そのようなものは存在しますか?そうでない場合、ユーザーが完全に後退するか、ホームを押すことによってタスクが保留にされたことを通知する「ベストプラクティス」の方法は何ですか?
2 に答える
うーん...残念ながら、簡単な答えはないと思います。組み込みのメディア プレーヤーと Pandora が通知を使用して、ユーザーがアプリに簡単に戻ってシャットダウンできるようにするのはそのためだと思います。
アクティビティ フローがかなり直線的である場合、アプリケーションをバックアウトすることは、最初のアクティビティをバックアウトすることと同じです。
あるシナリオで使用したトリックは、各アクティビティにonPause()
とのサービスを通知させることでしたonResume()
。サービスはこれらを監視し、一定期間onPause()
後onResume()
に応答がない場合は、ユーザーがいなくなったと見なされます (ホーム、電話の着信、テキスト メッセージの着信、通知によるアプリへの応答など)。
そのシナリオを処理するために、ACTION_SCREEN_OFF
ブロードキャストを監視することもできます。Intents
申し訳ありませんが、これ以上の特効薬の答えはありません。おそらく他の誰かがより良いアイデアを持っているでしょう。
私はやや似たような状況にあり、本質的にはマークが提案したことをしました。個別の通知ではなく、サービスに、各アクティビティで実行する必要のあるregisterCallback()APIとunregisterCallback()APIへの呼び出しをカウントさせるだけでした。