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.publicradionative; import android.content.ComponentName; import android.media.MediaMetadata; import android.media.browse.MediaBrowser; import android.media.session.MediaController; import android.media.session.PlaybackState; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.KeyEvent; import com.facebook.react.LifecycleState; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactRootView; import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; import com.facebook.react.shell.MainReactPackage; import com.oblador.vectoricons.VectorIconsPackage; import com.publicradionative.player.BackgroundPlayer; import com.publicradionative.player.MusicService; import java.util.List; /** * An Activity to browse and play media. */ public class MainActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler { // Receive callbacks from the MediaController. Here we update our state such as which queue // is being shown, the current title and description and the PlaybackState. private final MediaController.Callback mMediaControllerCallback = new MediaController.Callback() { @Override public void onMetadataChanged(MediaMetadata metadata) { updateMetadata(metadata); } @Override public void onPlaybackStateChanged(PlaybackState state) { BackgroundPlayer.backgroundPlayer.updatePlaybackState(state); } @Override public void onSessionDestroyed() { BackgroundPlayer.backgroundPlayer.updatePlaybackState(null); } }; private ReactInstanceManager mReactInstanceManager; private ReactRootView mReactRootView; private MediaBrowser mMediaBrowser; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mReactRootView = new ReactRootView(this); mReactInstanceManager = ReactInstanceManager.builder().setApplication(getApplication()) .setBundleAssetName("index.android.bundle").setJSMainModuleName("index.android") .addPackage(new MainReactPackage()).addPackage(new VectorIconsPackage()) .addPackage(new ProjectModulesPackage(this)).setUseDeveloperSupport(BuildConfig.DEBUG) .setInitialLifecycleState(LifecycleState.RESUMED).build(); mReactRootView.startReactApplication(mReactInstanceManager, "PublicRadioNative", null); setContentView(mReactRootView); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) { mReactInstanceManager.showDevOptionsDialog(); return true; } return super.onKeyUp(keyCode, event); } @Override public void onBackPressed() { if (mReactInstanceManager != null) { mReactInstanceManager.onBackPressed(); } else { super.onBackPressed(); } } @Override public void invokeDefaultOnBackPressed() { super.onBackPressed(); } @Override protected void onPause() { super.onPause(); if (mReactInstanceManager != null) { mReactInstanceManager.onPause(); } } @Override protected void onResume() { super.onResume(); if (mReactInstanceManager != null) { mReactInstanceManager.onResume(this); } } @Override public void onStart() { super.onStart(); mMediaBrowser = new MediaBrowser(this, new ComponentName(this, MusicService.class), new MediaBrowser.ConnectionCallback() { @Override public void onConnected() { mMediaBrowser.subscribe(mMediaBrowser.getRoot(), new MediaBrowser.SubscriptionCallback() { @Override public void onChildrenLoaded(String parentId, List<MediaBrowser.MediaItem> children) { } }); MediaController mediaController = new MediaController(MainActivity.this, mMediaBrowser.getSessionToken()); updateMetadata(mediaController.getMetadata()); mediaController.registerCallback(mMediaControllerCallback); setMediaController(mediaController); } }, null); mMediaBrowser.connect(); } @Override public void onStop() { super.onStop(); try { getMediaController().unregisterCallback(mMediaControllerCallback); mMediaBrowser.unsubscribe(mMediaBrowser.getRoot()); } catch (Exception ex) { Log.e("MainActivity", ex.toString()); } finally { mMediaBrowser.disconnect(); } } private void updateMetadata(MediaMetadata metadata) { if (metadata == null) { return; } // Log.d("####", metadata.getDescription().getMediaId()); // mTitle.setText(metadata == null ? "" : metadata.getDescription().getTitle()); // mSubtitle.setText(metadata == null ? "" : metadata.getDescription().getSubtitle()); // mAlbumArt.setImageBitmap(metadata == null ? null : MusicLibrary.getAlbumBitmap(this, // metadata.getDescription().getMediaId())); } }