問題タブ [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.

0 投票する
1 に答える
2512 参照

android - Android の Chrome で表示される「メディア再生中」の通知を取り除くにはどうすればよいですか?

私の HTML5 ゲームには、「html5」モードで Howler.js を使用するバックグラウンド ミュージックがいくつかあります。これにより、Chrome for Android のメディア再生通知がトリガーされるようです。これは、ユーザーが任意のタブでゲームを開いている間に通知が表示されることを意味します。

ゲームは善良な市民であり、タブがフォーカスされていない間は音楽を一時停止するため、この通知は不要です。ユーザーはゲームに参加しなくてもゲームのバックグラウンド ミュージックを一時停止および再開できるため、混乱を招くことさえあります。しかし、通知を取り除く方法が見つかりません。

stop()音楽オブジェクトの代わりに、pause()または音楽オブジェクトで呼び出してみmute()ましたが、これは通知を削除しません。

もう少し詳しく調べてみると、通知を制御するために使用できると思われる実験的なMediaSessionAPI ( W3C ドラフト) を発見しました。しかし、私の理解が正しければ、完全に無効にする方法はありません。

アプリケーションの開始時にこれを試しました:

ただし、これは宣言された再生状態を設定するだけです(仕様用語で)。そして、それをに設定し'none'ても効果はありません:

実際の再生状態は、次の方法で計算されます。

  • 宣言された再生状態が「再生中」の場合は、「再生中」を返します。
  • それ以外の場合は、推測された再生状態を返します。

そして、推測された再生状態は、私が制御できないものです。<audio>ページ上の要素の状態に基づいてブラウザによって導出されます。

私が見落としている可能性はありますか、それとも現在の MediaSession 仕様の単なる見落としですか?

0 投票する
1 に答える
115 参照

html5-audio - メディア通知を押したときに、ユーザーを自分の TWA に戻すにはどうすればよいですか?

プログレッシブ Web アプリを Trusted Web Activity としてラップする Android アプリを作成しています。( Google のサンプル プロジェクトのガイドラインに従っています。)

ユーザーがアプリでオーディオを再生すると、デバイスにメディア通知が表示されます。この通知の内容をカスタマイズするために、Web Media Session API を使用しています。

通常の Web ブラウザーで PWA を実行している場合、通知が表示されたら、それを押すと、ユーザーは関連するブラウザー タブに戻ります。(電話機がロックされている場合、ユーザーはロックを解除するように求められます)。

メディア通知が TWA からトリガーされた場合、それを押しても何も起こりません。(再生/一時停止などの他の機能は期待どおりに機能します。)

Media Session APIの範囲はかなり限定されています。MediaSession アクション タイプには、アプリにフォーカスするアクションは含まれません。

メディア通知が TWA からトリガーされた場合、Chrome などの Web ブラウザーからトリガーされた場合と同じ機能を期待します。

これには、再生/一時停止コントロール以外の場所で通知が押されたときに、ユーザーを TWA に戻す (またはユーザーにデバイスのロックを解除するように求める) ことが含まれます。

この側面を除いて、他のすべてが機能します。

0 投票する
1 に答える
914 参照

android - ExoPlayer と PlayerControlView を使用した MediaBrowserService - UI (PlayerControlView) からプレーヤー インスタンスにアクセスする方法は?

私は現在、ビデオとオーディオ機能を備えたアプリの一部に取り組んでおり、最近コードベースのリファクタリングを開始しました。目標は、統合MediaSession/ MediaControllerMediaBrowserService/ MediaBrowserフレームワークです。

より具体的には、ビデオ コンポーネントとオーディオ コンポーネントの両方にPlayerViewを使用ExoPlayerします。これには、次のプレーヤー インスタンスへの参照が必要です。PlayerControlViewPlayerControlView

ただし、Android 開発者の投稿と のドキュメントMediaBrowserServiceは、プレーヤー インスタンスはサービスに含まれている必要があります。さらに、クライアント サイト (MediaBrowser および MediaController) がconnect()メソッドとMediaBrowserConnectionCallbackを介して対話してサービスを提供する唯一の方法です。これにより、プレーヤーのインスタンスを PlayerControlView に渡す (またはその逆) ことができなくなります。

MediaSessionCompat.Callbackなどのさまざまなコールバックを使用してみましたが、SimpleExoPlayerPlayerControlViewも Parcelable ではありません。

従来のサービスでは、 を使用Binderしてサービス内で宣言したメソッドにアクセスし、次のようなことを行います。

ただし、これはMediaBrowserService/ MediaBrowserフレームワークでは不可能のようです。この質問への回答を確認しました。これは、[sendCommand] を使用してカスタム メソッドを呼び出す方法であることを示しています。ただし、パラメーターが Parcelable である必要もあります。

要約すると、私の質問は、フレームワークの下でPlayerControlViewインスタンスにアクセスするSimpleExoPlayer方法、またはその逆の方法があるかどうかMediaBrowserServiceです。

回答やコメントをお寄せいただきありがとうございます。