問題タブ [mediasession]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android の Chrome で表示される「メディア再生中」の通知を取り除くにはどうすればよいですか?
私の HTML5 ゲームには、「html5」モードで Howler.js を使用するバックグラウンド ミュージックがいくつかあります。これにより、Chrome for Android のメディア再生通知がトリガーされるようです。これは、ユーザーが任意のタブでゲームを開いている間に通知が表示されることを意味します。
ゲームは善良な市民であり、タブがフォーカスされていない間は音楽を一時停止するため、この通知は不要です。ユーザーはゲームに参加しなくてもゲームのバックグラウンド ミュージックを一時停止および再開できるため、混乱を招くことさえあります。しかし、通知を取り除く方法が見つかりません。
stop()
音楽オブジェクトの代わりに、pause()
または音楽オブジェクトで呼び出してみmute()
ましたが、これは通知を削除しません。
もう少し詳しく調べてみると、通知を制御するために使用できると思われる実験的なMediaSession
API ( W3C ドラフト) を発見しました。しかし、私の理解が正しければ、完全に無効にする方法はありません。
アプリケーションの開始時にこれを試しました:
ただし、これは宣言された再生状態を設定するだけです(仕様用語で)。そして、それをに設定し'none'
ても効果はありません:
実際の再生状態は、次の方法で計算されます。
- 宣言された再生状態が「再生中」の場合は、「再生中」を返します。
- それ以外の場合は、推測された再生状態を返します。
そして、推測された再生状態は、私が制御できないものです。<audio>
ページ上の要素の状態に基づいてブラウザによって導出されます。
私が見落としている可能性はありますか、それとも現在の MediaSession 仕様の単なる見落としですか?
html5-audio - メディア通知を押したときに、ユーザーを自分の TWA に戻すにはどうすればよいですか?
プログレッシブ Web アプリを Trusted Web Activity としてラップする Android アプリを作成しています。( Google のサンプル プロジェクトのガイドラインに従っています。)
ユーザーがアプリでオーディオを再生すると、デバイスにメディア通知が表示されます。この通知の内容をカスタマイズするために、Web Media Session API を使用しています。
通常の Web ブラウザーで PWA を実行している場合、通知が表示されたら、それを押すと、ユーザーは関連するブラウザー タブに戻ります。(電話機がロックされている場合、ユーザーはロックを解除するように求められます)。
メディア通知が TWA からトリガーされた場合、それを押しても何も起こりません。(再生/一時停止などの他の機能は期待どおりに機能します。)
Media Session APIの範囲はかなり限定されています。MediaSession アクション タイプには、アプリにフォーカスするアクションは含まれません。
メディア通知が TWA からトリガーされた場合、Chrome などの Web ブラウザーからトリガーされた場合と同じ機能を期待します。
これには、再生/一時停止コントロール以外の場所で通知が押されたときに、ユーザーを TWA に戻す (またはユーザーにデバイスのロックを解除するように求める) ことが含まれます。
この側面を除いて、他のすべてが機能します。
android - ExoPlayer と PlayerControlView を使用した MediaBrowserService - UI (PlayerControlView) からプレーヤー インスタンスにアクセスする方法は?
私は現在、ビデオとオーディオ機能を備えたアプリの一部に取り組んでおり、最近コードベースのリファクタリングを開始しました。目標は、統合MediaSession/ MediaController
とMediaBrowserService/ MediaBrowser
フレームワークです。
より具体的には、ビデオ コンポーネントとオーディオ コンポーネントの両方にPlayerViewを使用ExoPlayer
します。これには、次のプレーヤー インスタンスへの参照が必要です。PlayerControlView
PlayerControlView
ただし、Android 開発者の投稿と のドキュメントでMediaBrowserService
は、プレーヤー インスタンスはサービスに含まれている必要があります。さらに、クライアント サイト (MediaBrowser および MediaController) がconnect()
メソッドとMediaBrowserConnectionCallbackを介して対話してサービスを提供する唯一の方法です。これにより、プレーヤーのインスタンスを PlayerControlView に渡す (またはその逆) ことができなくなります。
MediaSessionCompat.Callbackなどのさまざまなコールバックを使用してみましたが、SimpleExoPlayerもPlayerControlViewも Parcelable ではありません。
従来のサービスでは、 を使用Binder
してサービス内で宣言したメソッドにアクセスし、次のようなことを行います。
ただし、これはMediaBrowserService/ MediaBrowser
フレームワークでは不可能のようです。この質問への回答を確認しました。これは、[sendCommand] を使用してカスタム メソッドを呼び出す方法であることを示しています。ただし、パラメーターが Parcelable である必要もあります。
要約すると、私の質問は、フレームワークの下でPlayerControlView
インスタンスにアクセスするSimpleExoPlayer
方法、またはその逆の方法があるかどうかMediaBrowserService
です。
回答やコメントをお寄せいただきありがとうございます。