2017-11-14 25 views
6

私はラジオ局用の簡単なオーディオプレーヤーアプリを開発しています。
MediaBrowserを作成し、playBack - またはmetadataの変更を受信するコールバックを登録しました。onMetadataChanged MediaControllerCompat.Callbackはまだ呼び出されていません

var mediaBrowser : MediaBrowserCompat by Delegates.notNull() 
mediaBrowser = MediaBrowserCompat(
     activity, 
     ComponentName(activity, MediaPlaybackService::class.java), 
     object : MediaBrowserCompat.ConnectionCallback() { 
      override fun onConnected() { 
       val mediaController = MediaControllerCompat(activity, mediaBrowser.sessionToken) 
       MediaControllerCompat.setMediaController(activity, mediaController) 
       mediaController.registerCallback(ControllerCallback) 
       mediaControllerFunc() 
      } 
     }, 
     null 
) 

object ControllerCallback : MediaControllerCompat.Callback() { 
    override fun onMetadataChanged(metadata: MediaMetadataCompat) { 
     //TODO: Never called 
    } 

    override fun onPlaybackStateChanged(state: PlaybackStateCompat) { 
     //Called 
    } 
} 

メタデータの変更はありませんしかし、私は

mediaSession.setPlaybackState(
    PlaybackStateCompat.Builder() 
      .setActions(PlaybackStateCompat.ACTION_PLAY_PAUSE) 
      .setState(STATE_PLAYING, DEFAULT_PLAYBACK_POSITION, DEFAULT_PLAYBACK_SPEED) 
      .build() 
) 

を呼び出すときplayback変更が受信されています。私はメタデータの変更を受け取るために何をしないのです

mediaSession.setMetadata(
    MediaMetadataCompat.Builder() 
     .putLong(METADATA_KEY_DURATION, -1) 
     .putString(METADATA_KEY_TITLE, title) 
     .putString(METADATA_KEY_ARTIST, artist) 
     .putBitmap(METADATA_KEY_ALBUM_ART, albumCover) 
     .putString(METADATA_KEY_ALBUM_ART_URI, albumCoverUrl) 
     .build() 
) 

を呼び出していても

それは完全なリポジトリが事前

答えて

1

誰もが体験する私のソリューションを呼び出すことはありませんGithub

で提供されて助けることができる場合同じ問題。

私はcompat(オーディオサービスの開始とメタデータへの接続を担当するサービス層)と、APIのcompat(UI層)以外のものを混在させていました。

特に、活性。
私はLollipop以上をターゲットにしているので、AppCompatActivityの代わりにActivityを使用することに決めました。

MediaControllerCompat.CallbackonMetadataChanged()であることが明らかですが、onPlaybackStateChanged()では表示されません。
なぜ見つからないようですか?コードで

それが変化するのと同じくらい簡単です:

class PlayableActivity : Activity() { ... }

へ:

class PlayableActivity : AppCompatActivity() { ... }

0

のおかげであなたはMediaControllerCompatためのコールバックを登録したように思えるが、onPlaybackStateChanged(mMediaController.getPlaybackState()) as in sample here

+0

です。正しくありません – tim

1

onPlaybackStateChanged適切に私のために、バージョン26の前にサポートライブラリのために動作します。それ以来、私はこの特定のコールバックをまったく引き起こすことはできません。 onConnected()で強制的にアップデートしたあと、onMetadataChangedが正常に動作します。すべてがComppatタイプのものです。 私はソースに見て、onPlaybackStateChangedの場合には、それがトリガーされることは決してありませんこれは、いくつかのExtraCallbackに依存しています:

@Override 
     public void onPlaybackStateChanged(Object stateObj) { 
      MediaControllerCompat.Callback callback = mCallback.get(); 
      if (callback != null) { 
       if (callback.mHasExtraCallback) { 
        // Ignore. ExtraCallback will handle this. 
       } else { 
        callback.onPlaybackStateChanged(
          PlaybackStateCompat.fromPlaybackState(stateObj)); 
       } 
      } 
     } 

私はそれが関連しているかどうかわからないけど、それがあることを起こるかもしれないので、このExtraCallbackが弱い参照されていますそれは失われており、収集されています。

関連する問題