Java tutorial
/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.chu.googleplaylibrary.ui; import android.content.ComponentName; import android.os.Bundle; import android.os.RemoteException; import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.session.MediaControllerCompat; import android.support.v4.media.session.MediaSessionCompat; import android.support.v4.media.session.PlaybackStateCompat; import com.example.chu.googleplaylibrary.MusicService; import com.example.chu.googleplaylibrary.utils.LogHelper; /** * Base activity for activities that need to show a playback control fragment when media is playing. */ public abstract class BaseActivity extends ActionBarCastActivity implements MediaBrowserProvider { private static final String TAG = LogHelper.makeLogTag(BaseActivity.class); private MediaBrowserCompat mMediaBrowser; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LogHelper.d(TAG, "Activity onCreate"); // Connect a media browser just to get the media session token. There are other ways // this can be done, for example by sharing the session token directly. mMediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, MusicService.class), mConnectionCallback, null); } @Override protected void onStart() { super.onStart(); LogHelper.d(TAG, "Activity onStart"); mMediaBrowser.connect(); } @Override protected void onStop() { super.onStop(); LogHelper.d(TAG, "Activity onStop"); mMediaBrowser.disconnect(); } @Override public MediaBrowserCompat getMediaBrowser() { return mMediaBrowser; } /** * Check if the MediaSession is active and in a "playback-able" state * (not NONE and not STOPPED). * * @return true if the MediaSession's state requires playback controls to be visible. */ protected boolean shouldShowControls() { MediaControllerCompat mediaController = getSupportMediaController(); if (mediaController == null || mediaController.getMetadata() == null || mediaController.getPlaybackState() == null) { return false; } switch (mediaController.getPlaybackState().getState()) { case PlaybackStateCompat.STATE_ERROR: case PlaybackStateCompat.STATE_NONE: case PlaybackStateCompat.STATE_STOPPED: return false; default: return true; } } private void connectToSession(MediaSessionCompat.Token token) throws RemoteException { MediaControllerCompat mediaController = new MediaControllerCompat(this, token); setSupportMediaController(mediaController); } // Callback that ensures that we are showing the controls private final MediaBrowserCompat.ConnectionCallback mConnectionCallback = new MediaBrowserCompat.ConnectionCallback() { @Override public void onConnected() { LogHelper.d(TAG, "onConnected"); try { connectToSession(mMediaBrowser.getSessionToken()); } catch (RemoteException e) { LogHelper.e(TAG, e, "could not connect media controller"); } } }; }