問題タブ [mediabrowserservicecompat]

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 に答える
1895 参照

android - Android: NotificationCompat.MediaStyle アクション ボタンは何もしません

から派生しActivityた とを含む単純な Android アプリがあります。と を使用して、メイン アクティビティからオーディオを再生するようにセットアップすることに成功しました。Bluetooth ヘッドフォンからのオーディオを再生および一時停止することもできます。すべて良い。ServiceMediaBrowserServiceCompatMediaBrowserCompatMediaControllerCompat

私の課題はNotificationCompat.MediaStyle、ロック画面と通知トレイに表示される通知に関するものです。通知は正常に表示されます。ただし、 と を使用してボタンを追加するaddAction()MediaButtonReceiver.buildMediaButtonPendingIntent、何もしません。代わりに、メイン アクティビティを起動するだけのダミーの PendingIntent を追加すると、問題なく動作します。

通知を生成するためのコードを次に示します (申し訳ありませんが、これは Xamarin で実行されている C# であるため、大文字と小文字の区別と名前は、予想とは少し異なります)。これは私のサービスクラスの中にあります。

これを解決するためにこれまで見てきたことは次のとおりです。

  • 再生を開始するときに使用しますMediaSession.setActive(true)
  • 再生を開始および停止するたびに、適切なアクションをPlaybackStateCompat
  • セッショントークンが正しく設定されています。
  • Android 5.0 以降をターゲットにしてクラスを使用しているため、マニフェストにとして何も設定していません。MediaButtonReceiverandroid.intent.action.MEDIA_BUTTON*Compat

Bluetooth ヘッドフォン ボタンが機能するため、メディア ボタン イベントがアプリに適切にルーティングされていることはわかっています。私は自分の車で試してみましたが、そこでも機能します。機能しないのは、通知のボタンだけです。の適切なメソッドへの呼び出しを生成することを期待していますMediaSessionCompat.Callback。これは間違っていますか?ここで何が間違っていますか?

任意のポインタに感謝します。


更新: 私はそれを働かせました。<application>マニフェストのノード内に次を追加する必要がありました。

...そして、実装する Service のノード内の以下MediaBrowserServiceCompat:

Bluetooth ヘッドフォンとカー インフォテインメント システムからボタンを押すと、アプリに問題なくルーティングされたので、なぜこれが必要なのか、まだ少し混乱しています。さらに重要なことに、Googleは次のように述べています。

MediaBrowserServiceCompatアプリに が既にある場合はMediaButtonReceiver、受信したキー イベントを MediaBrowserServiceCompatデフォルトで に配信します。でそれらを処理できます MediaSessionCompat.Callback

彼らはこれを「Service Handling ACTION_MEDIA_BUTTON」オプションの代替として提供したので、マニフェストでこれ以上何もする必要がないことを意味すると考えました。誰かがここで私を啓発できるなら、私はそれを感謝します.

しかし、それだけの価値はありますが、これは私にとってはうまくいきました。

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です。

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