問題タブ [mediabrowserservice]
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 で Wave ファイルを再生するための MediaBrowserService と MediaPlayer の比較
Android デベロッパー ガイドのBuilding an Audio App section の下に、次の記述があります。
オーディオ アプリの推奨アーキテクチャは、クライアント/サーバー設計です。プレーヤーとそのメディア セッションは MediaBrowserService 内に実装され、UI とメディア コントローラーは MediaBrowser と共に Android アクティビティ内に存在します。
一方、MediaPlayerクラスもあります。
どの状況でどの方法が好まれますか?
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 回サブスクライブされた後にコンテンツを更新する問題を処理していないようです。
関連する可能性のある問題:
android - MediaBrowserService でアーキテクチャ コンポーネントを使用するにはどうすればよいですか?
MediaBrowserService でオーディオを再生するアプリを作成しようとしていますが、新しいアーキテクチャ コンポーネントを使用してアプリ全体を構成しています。以前に別のアプリ ( https://github.com/willhwongwork/PodCast ) で MediaBrowserService を使用したことがありますが、そのアプリでは OnGetRoot() および OnGetChildren() メソッドを使用してデータをロードしませんでした。ローダーまたは asynctask を使用してデータをロードするだけです。ネットワークから(そしてそのアプリにはアーキテクチャがありません)。
では、LiveData と ViewModel を使用したい場合、コードをどのように構成すればよいでしょうか? MediaBrowserService でそれらを使用し、OnGetRoot() および OnGetChildren() メソッドを介して UI にデータを提供する必要がありますか?