AudioFocusRequestClass クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
オーディオ フォーカス要求に関する情報をカプセル化するクラス。
[Android.Runtime.Register("android/media/AudioFocusRequest", ApiSince=26, DoNotGenerateAcw=true)]
public sealed class AudioFocusRequestClass : Java.Lang.Object
[<Android.Runtime.Register("android/media/AudioFocusRequest", ApiSince=26, DoNotGenerateAcw=true)>]
type AudioFocusRequestClass = class
inherit Object
- 継承
- 属性
注釈
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 AudioFocusRequest
インスタンスは によってBuilder
構築され、 と でそれぞれAudioManager#requestAudioFocus(AudioFocusRequest)
AudioManager#abandonAudioFocusRequest(AudioFocusRequest)
オーディオ フォーカスを要求および破棄するために使用されます。
<h3>オーディオフォーカス<とは/h3>
オーディオ フォーカスは、API 8 で導入された概念です。 これは、ユーザーが一度に 1 つのオーディオ ストリーム (音楽やポッドキャストを聴くなど) にのみ集中できるが、同時には集中できないという事実を伝えるために使用されます。 場合によっては、複数のオーディオ ストリームを同時に再生できますが、実際にリッスンする (フォーカスする) のは 1 つだけで、もう 1 つはバックグラウンドで再生されます。 たとえば、音楽が音量を下げる (ダッキング) ときに、方向が読み上げられるなどです。
アプリケーションは、オーディオ フォーカスを要求すると、オーディオを再生するためにオーディオ フォーカスを "所有" する意図を表します。 さまざまな種類のフォーカス要求、要求後の戻り値、および損失に対する応答を確認しましょう。 <p class="note">注: アプリケーションは、フォーカスが付与されるまで何も再生しないでください。
<h3>さまざまな種類のフォーカス要求</h3>
フォーカス要求の種類は 4 つあります。 それぞれのフォーカス要求が成功すると、システムと、以前にオーディオ フォーカスを保持していた他のアプリケーションによって異なる動作が生成されます。 <ul><li>AudioManager#AUDIOFOCUS_GAIN
は、アプリケーションがユーザーがリッスンしている唯一のオーディオ ソースになったという事実を表します。 オーディオ再生の継続時間は不明であり、非常に長くなる可能性があります。ユーザーがアプリケーションとの対話を完了した後、別のオーディオ ストリームが再開されるとは思われません。 このフォーカス ゲインの使用例は、ゲームやビデオ プレーヤーの音楽再生です。</李>
<li>AudioManager#AUDIOFOCUS_GAIN_TRANSIENT
は、アプリケーションが現在の所有者から一時的にフォーカスを取得していることがわかっているが、ユーザーは、アプリケーションがオーディオ フォーカスを必要としなくなったら、再生が元の場所に戻ることを期待している場合に使用します。 たとえば、アラームを再生したり、VoIP 通話中に再生したりします。 再生は有限であることが知られています。アラームはタイムアウトするか無視されます。VoIP 呼び出しには開始と終了があります。 これらのイベントのいずれかが終了し、ユーザーが開始時に音楽を聴いていた場合、ユーザーは音楽が再開することを期待しますが、両方を同時に聴くことを望んでいませんでした。</李>
<li>AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
: このフォーカス要求の種類は、フォーカス要求の一時的な側面に似ています AUDIOFOCUS_GAIN_TRANSIENT
が、また、フォーカスを所有している間に、別のアプリケーションが音量を小さくして "ducked" で再生し続けるという事実も表します。 たとえば、道案内や通知を再生する場合は、音楽を再生し続けても問題ありませんが、方向が理解しにくくならないように十分な大きさではありません。 "ducked" アプリケーションによる一般的な減衰は、0.2f (または -14dB) の係数であり、たとえば、このクラスを再生に使用するときに と MediaPlayer.setVolume(0.2f)
適用できます。</李>
<li>AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE
は一時的な要求用でもありますが、アプリケーションはデバイスが他の何も再生しないことを期待していることを表します。 これは通常、オーディオ録音や音声認識を行っていて、その間にシステムで例の通知を再生したくない場合に使用されます。</li></ul>
AudioFocusRequest
インスタンスには、上記の 4 種類の要求のいずれかが常に含まれます。 コンストラクター AudioFocusRequest.Builder#Builder(int)
でビルダーを使用してインスタンスをAudioFocusRequest
ビルドするとき、または AudioFocusRequest.Builder#setFocusGain(int)
を使用して既存のBuilder
インスタンスをコピーした後に を使用してインスタンスAudioFocusRequest.Builder#Builder(AudioFocusRequest)
を構築するときに渡されます。
<h3>フォーカス要求<を修飾する/h3><h4>フォーカス要求<を必要とするユース ケース/h4>
フォーカス要求は、要求に AudioAttributes
従うオーディオ ユース ケース (成功または許可された後) を記述する ( を参照 Builder#setAudioAttributes(AudioAttributes)
) によって修飾されます。 要求には、オーディオ/メディア再生に使用する属性と同じもの AudioAttributes
を使用することをお勧めします。 <br>属性が設定されていない場合は、 の AudioAttributes#USAGE_MEDIA
既定の属性が使用されます。
<h4>遅延フォーカス</h4>
電話中、デバイスが接続されている車が緊急メッセージを再生する場合など、さまざまな理由で、システムによってオーディオ フォーカスが "ロック" される可能性があります。このような状況をサポートするために、アプリケーションは、要求が満たされたときに通知を受け取るように要求できます。要求に遅延フォーカス Builder#setAcceptsDelayedFocusGain(boolean)
を受け入れるようにフラグを設定します。 <br>システムによってロックされている間にフォーカスが要求された場合、 AudioManager#requestAudioFocus(AudioFocusRequest)
は を返します AudioManager#AUDIOFOCUS_REQUEST_DELAYED
。 フォーカスがロックされなくなった場合は、 または Builder#setOnAudioFocusChangeListener(OnAudioFocusChangeListener, Handler)
でBuilder#setOnAudioFocusChangeListener(OnAudioFocusChangeListener)
設定されたフォーカス リスナーが呼び出され、オーディオ フォーカスが所有されているアプリケーションに通知されます。
<h4>一時停止とダッキング</h4>
アプリケーションが でオーディオ フォーカスを AudioManager#AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
要求すると、システムは現在のフォーカス所有者をアヒルします。 <p class="note">注: この動作は Android O</b> の新>しい動作ですが<、API 25 までの SDK レベルを対象とするアプリケーションでは、 のフォーカス損失AudioManager#AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK
を受け取ったときにダッキング自体を実装する必要がありました。
しかし、ダッキングは常にユーザーが期待する動作であるとは限りません。 一般的な例は、ユーザーがオーディオ ブックまたはポッドキャストを聞いている間にデバイスが走行方向を再生し、ナビゲーション プロンプトと音声コンテンツを同時に理解するのが難しいため、アヒルの代わりにオーディオ再生が一時停止することを想定している場合です。 したがって、システムは、それが話されたコンテンツをダッキングすることを検出したときに自動的にアヒルされることはありません:そのようなコンテンツは、プレーヤーの が によってAudioAttributes#CONTENT_TYPE_SPEECH
修飾されたときにAudioAttributes
検出されます。 オーディオブック、ポッドキャスト用のメディア再生アプリケーションを作成している場合は、 と を参照AudioAttributes.Builder#setContentType(int)
MediaPlayer#setAudioAttributes(AudioAttributes)
してください。システムは音声を再生するアプリケーションを自動的に実行しないため、代わりにフォーカス リスナーを呼び出して を通知AudioManager#AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK
し、代わりに一時停止できるようにします。 この動作は、 の使用とは無関係ですが、 の AudioFocusRequest
使用 AudioAttributes
に関連付けられていることに注意してください。
音声を再生する以外の理由で、アプリケーションでダッキングの代わりに一時停止する必要がある場合は、 を使用 Builder#setWillPauseWhenDucked(boolean)
して 宣言することもできます。これにより、システムは自動的にダッキングするのではなく、フォーカス リスナーを呼び出すことができます。
<h4>の例</h4>
次の例では、オーディオを再生し、オーディオ フォーカスを使用するすべてのアプリケーションで見つかる次の手順について説明します。 ここではオーディオ ブックを再生します。アプリケーションは、フォーカスが失われるときにアヒルではなく一時停止することを目的としています。 これらの手順は、<再生とフォーカス要求に使用される ul><li>Creating AudioAttributes
で構成されます。</li li>><目的のフォーカス動作をAudioFocusRequest
定義するインスタンスの構成と作成。</li li><>オーディオ フォーカスを要求し、リターン コードを確認して、再生がすぐに行われるか、遅延しているかどうかを確認します。</li li><>フォーカスの増減に対応するためのフォーカス変更リスナーの実装。</li></ul>
// initialization of the audio attributes and focus request
mAudioManager = (AudioManager) Context.getSystemService(Context.AUDIO_SERVICE);
mPlaybackAttributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.build();
mFocusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setAudioAttributes(mPlaybackAttributes)
.setAcceptsDelayedFocusGain(true)
.setWillPauseWhenDucked(true)
.setOnAudioFocusChangeListener(this, mMyHandler)
.build();
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioAttributes(mPlaybackAttributes);
final Object mFocusLock = new Object();
boolean mPlaybackDelayed = false;
// requesting audio focus
int res = mAudioManager.requestAudioFocus(mFocusRequest);
synchronized (mFocusLock) {
if (res == AudioManager.AUDIOFOCUS_REQUEST_FAILED) {
mPlaybackDelayed = false;
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mPlaybackDelayed = false;
playbackNow();
} else if (res == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
mPlaybackDelayed = true;
}
}
// implementation of the OnAudioFocusChangeListener
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (mPlaybackDelayed || mResumeOnFocusGain) {
synchronized (mFocusLock) {
mPlaybackDelayed = false;
mResumeOnFocusGain = false;
}
playbackNow();
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
synchronized (mFocusLock) {
// this is not a transient loss, we shouldn't automatically resume for now
mResumeOnFocusGain = false;
mPlaybackDelayed = false;
}
pausePlayback();
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
// we handle all transient losses the same way because we never duck audio books
synchronized (mFocusLock) {
// we should only resume if playback was interrupted
mResumeOnFocusGain = mMediaPlayer.isPlaying();
mPlaybackDelayed = false;
}
pausePlayback();
break;
}
}
// Important:
// Also set "mResumeOnFocusGain" to false when the user pauses or stops playback: this way your
// application doesn't automatically restart when it gains focus, even though the user had
// stopped it.
の Java ドキュメント android.media.AudioFocusRequest
。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
プロパティ
AudioAttributes |
この |
Class |
この |
FocusGain |
この |
Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
JniIdentityHashCode |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
JniPeerMembers |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 |
PeerReference |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。 (継承元 Object) |
ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用することを意図したものではありません。 (継承元 Object) |
メソッド
AcceptsDelayedFocusGain() |
これを |
Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
Dispose() |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
Dispose(Boolean) |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
JavaFinalize() |
ガベージ コレクションがオブジェクトへの参照がなくなったと判断したときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドをウェイクアップします。 (継承元 Object) |
NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドをウェイクアップします。 (継承元 Object) |
SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
ToArray<T>() |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
UnregisterFromRuntime() |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
Wait() |
現在のスレッドが起動するまで待機します。通常<>は、通知</em> または <em>割り込み</em によって待機します>。 (継承元 Object) |
Wait(Int64) |
現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
Wait(Int64, Int32) |
現在のスレッドが起動するまで待機します。通常<>は、通知</em> または>< em 割り込み</em>、または一定のリアルタイムが経過するまで待機します。 (継承元 Object) |
WillPauseWhenDucked() |
これを |
明示的なインターフェイスの実装
IJavaPeerable.Disposed() |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
IJavaPeerable.Finalized() |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
IJavaPeerable.JniManagedPeerState |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 (継承元 Object) |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 |
GetJniTypeName(IJavaPeerable) |
オーディオ フォーカス要求に関する情報をカプセル化するクラス。 |