問題タブ [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.
android - MediaMetadataCompat Extras
サポート ライブラリの MediaMetadataCompat でエクストラを使用する方法はありますか?
MediaMetadata を使用してエクストラを設定できますが、compat では設定できません。
java - API26 の MediaBrowserServiceCompat
MediaBrowserServiceCompat を使用してバックグラウンド ミュージック プレーヤー用の Android アプリの開発を開始したところ、Android エミュレータ API 26 でこの例外が発生しました (API 24 ではクラッシュしません)。何か見逃したのでしょうか、それとも API 26 のバグに遭遇したのでしょうか? ありがとうございました
MainActivity.java
MyService.java
android - MediaControllerCompat の onPlayFromMediaId() メソッドの奇妙な動作
私は を拡張するサービスを使用しており、 を含むオーバーライドされたメソッドMediaBrowserServiceCompat
もあります。MediaSessionCompat.Callback()
onPlayFromMediaId()
recyclerview アイテムをクリックすると、recyclerview を持つフラグメントから内部で、次のコードが呼び出されます。mediaId
画像のように、値を持っているだけでなく、メソッドsongBundle
に渡されていることも明らかです。onPlayFromMediaId()
奇妙なことに、メソッドがオーバーライドされる Service クラス内では、魔法のように空になる間、playFromMediaId()
文字列変数の値のみを受け取ります。(注- parcelable の配置と取得に使用されるキーも同じです。parcelableは、インターフェイスを実装する POJOです。)mediaId
songBundle
songsVO
Parcelable
これとは別に、私が気付いたもう 1 つの興味深い点は、onPlayFromMediaId()
実行後に後で呼び出されたフラグメントに戻り、他のすべての変数を除いmediaId
てすべての変数の値を確認することです。
RecyclerAdapter クラス
TLDR-onPlayFromMediaId(String, Bundle)
バンドルが空で渡される間、文字列変数のみを渡します。
参照 -このチュートリアル
java - MediaBrowserCompat.connect() は、onConnected または MediaBrowserCompat.ConnectionCallback メソッドを呼び出しません。
を使用してアクティビティをMediaBrowserServiceCompat
サービスに接続しようとしていMediaBrowserCompat
ます。これは私の活動です:
メソッドの 1 つが呼び出されることを期待するかもしれませんがConnectionCallback
、これは logcat が出力するものです (サービスから呼び出されたログを含む)。
私のサービスで次のように呼び出すsetSessionToken(mediaSession.getSessionToken())
と、クラッシュしNullPointerException
ます。
私のマニフェスト<action android:name="android.media.browse.MediaBrowserService"/>
に、サービスに必要なものを追加しました。
私は何か間違ったことをしていますか、それとも appcompat(v7:25.3.1) の単なるバグですか?
android - MediaBrowserService サブスクリプション コンテンツの更新
TL;DR:アクティビティを作成し、(サブスクリプションを介して) メディア ブラウザー サービスに結合することに成功しました。このメディア ブラウザ サービスは、実行を継続し、バックグラウンドで音楽を再生できます。アプリが再びフォアグラウンドになったとき、または SwipeRefreshLayout イベント中に、ある段階でコンテンツを更新できるようにしたいと考えています。
実装したい次の機能があります。
- MediaBrowserServiceCompat サービスを開始します。
- アクティビティから、メディア ブラウザー サービスに接続してサブスクライブします。
- アプリを閉じている間も、サービスの実行と音楽の再生を継続できるようにします。
- 後の段階で、または SwipeRefreshLayout イベントで、サービスに再接続してサブスクライブし、新しいコンテンツを取得します。
私が受け取っている問題は、MediaBrowserService 内で (サブスクリプションが作成された後)、 onLoadChildren() メソッドから sendResult() を 1 回しか呼び出せないため、次に同じルートを使用してメディア ブラウザ サービスにサブスクライブしようとするときです。の場合、sendResult() が 2 回目に呼び出されると、次の例外が発生します。
次のメソッドを呼び出して、メディア ブラウザーに接続および切断します (ここでも、最初の接続ではすべてがスムーズに実行されますが、2 番目の接続では、サブスクリプションを介してコンテンツを更新する方法がわかりません)。
アクティビティがバックスタックに保持されている場合でもサブスクリプションが再作成されるように、onDestroy() の代わりに onPause() でサブスクリプションを解除して切断します。
アクティビティとサービスのそれぞれで、スワイプの更新に使用される実際の方法:
アクティビティ
サービス
その他の研究:
Github の Google Samples コードも参照しました...
- https://github.com/googlesamples/android-MediaBrowserService
- https://github.com/moondroid/UniversalMusicPlayer
上記のレポはどちらも、メディア ブラウザ サービスが作成され、アクティビティが少なくとも 1 回サブスクライブされた後にコンテンツを更新する問題を処理していないようです。
関連する可能性のある問題: