/** * 根据id获取对应的MediaMetadataCompat对象 */ public MediaMetadataCompat getMusic(String songId) { MediaMetadataCompat music = null; for (MediaMetadataCompat data : metadatas) { if (data != null && data.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID).equals(songId)) { music = data; break; } } return music; }
@Override public void onMetadataChanged(MediaMetadataCompat mediaMetadata) { if (mediaMetadata == null) { return; } mTitleTextView.setText( mediaMetadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE)); mArtistTextView.setText( mediaMetadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST)); mAlbumArt.setImageBitmap(MusicLibrary.getAlbumBitmap( MainActivity.this, mediaMetadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID))); }
@SuppressLint("WrongConstant") public Station (MediaMetadataCompat stationMediaMetadata) { mStationName = stationMediaMetadata.getString(METADATA_KEY_TITLE); mStreamUri = Uri.parse(stationMediaMetadata.getString(METADATA_KEY_MEDIA_URI)); mPlayback = PLAYBACK_STATE_STOPPED; if (stationMediaMetadata.getString(METADATA_CUSTOM_KEY_IMAGE_FILE) != null) { mStationImageFile = new File(stationMediaMetadata.getString(METADATA_CUSTOM_KEY_IMAGE_FILE)); mStationImageSize = mStationImageFile.length(); } if (stationMediaMetadata.getString(METADATA_CUSTOM_KEY_PLAYLIST_FILE) != null) { mStationPlaylistFile = new File(stationMediaMetadata.getString(METADATA_CUSTOM_KEY_PLAYLIST_FILE)); } // mPlaylistFileContent = ""; // mMetadata = ""; // mMimeType = ""; // mChannelCount = 0; // mSampleRate = 0; // mBitrate = 0; // mStationFetchResults = null; }
private synchronized void retrieveStations(Context context) { if (mCurrentState == State.NON_INITIALIZED) { mCurrentState = State.INITIALIZING; ArrayList<Station> stationList = StationListHelper.loadStationListFromStorage(context); if (stationList != null) { for (Station station : stationList) { MediaMetadataCompat item = buildMediaMetadata(station); String mediaId = item.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID); mStationListById.put(mediaId, item); } } mCurrentState = State.INITIALIZED; } }
/** * 获取当前播放的歌曲songId */ public String getNowPlayingSongId() { String songId = ""; MediaSessionConnection connection = MediaSessionConnection.getInstance(sContext); if (connection.isConnected()) { MediaMetadataCompat metadataCompat = connection.getNowPlaying(); if (metadataCompat != null) { songId = metadataCompat.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID); } } return songId; }
@Override public void onPlayFromSearch(String query, Bundle extras) { // handle requests to begin playback from a search query (eg. Assistant, Android Auto, etc.) LogHelper.i(LOG_TAG, "playFromSearch query=" + query + " extras="+ extras); if (TextUtils.isEmpty(query)) { // user provided generic string e.g. 'Play music' mStation = new Station(mStationListProvider.getFirstStation()); } else { // try to match station name and voice query for (MediaMetadataCompat stationMetadata : mStationListProvider.getAllStations()) { String[] words = query.split(" "); for (String word : words) { if (stationMetadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE).toLowerCase().contains(word.toLowerCase())) { mStation = new Station(stationMetadata); } } } } // start playback startPlayback(); }
/** * List#MediaMetadataCompat 转 ConcatenatingMediaSource */ public ConcatenatingMediaSource toMediaSource(DataSource.Factory dataSourceFactory) { ConcatenatingMediaSource concatenatingMediaSource = new ConcatenatingMediaSource(); for (MediaMetadataCompat metadata : metadatas) { MediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory) .setTag(fullDescription(metadata)) .createMediaSource(Uri.parse(metadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI))); concatenatingMediaSource.addMediaSource(mediaSource); } return concatenatingMediaSource; }
private void updateText() { if (mPlaybackManager.getCurrentQuery() != null) { mArtistTextView.setText(mPlaybackManager.getCurrentQuery().getArtist().getPrettyName()); mTrackTextView.setText(mPlaybackManager.getCurrentQuery().getPrettyName()); } else { mArtistTextView.setText(null); mTrackTextView.setText(null); } if (mPlaybackManager.getPlaylist() instanceof StationPlaylist) { if (mPlaybackManager.getCurrentQuery() == null) { MediaMetadataCompat metadata = mMediaController.getMetadata(); if (metadata != null) { String displayTitle = metadata.getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE); if (displayTitle != null) { mTrackTextView.setText(displayTitle); } } } mStationContainer.setVisibility(VISIBLE); mStationTextView.setText(mPlaybackManager.getPlaylist().getName()); } else { mStationContainer.setVisibility(INVISIBLE); } }
/** * 获取当前播放的歌曲信息 */ public SongInfo getNowPlayingSongInfo() { SongInfo songInfo = null; MediaSessionConnection connection = MediaSessionConnection.getInstance(sContext); if (connection.isConnected()) { MediaMetadataCompat metadataCompat = connection.getNowPlaying(); if (metadataCompat != null) { String songId = metadataCompat.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID); List<SongInfo> songInfos = MusicProvider.getInstance().getSongInfos(); for (SongInfo info : songInfos) { if (info.getSongId().equals(songId)) { songInfo = info; break; } } } } return songInfo; }
@Override public void onMetadataChanged(MediaMetadataCompat metadata) { super.onMetadataChanged(metadata); nowPlaying = metadata != null ? metadata : NOTHING_PLAYING; //状态监听 CopyOnWriteArrayList<OnPlayerEventListener> mPlayerEventListeners = MusicManager.getInstance().getPlayerEventListeners(); if (metadata != null) { SongInfo songInfo = null; for (OnPlayerEventListener listener : mPlayerEventListeners) { List<SongInfo> songInfos = MusicProvider.getInstance().getSongInfos(); for (SongInfo info : songInfos) { if (info.getSongId().equals(metadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID))) { songInfo = info; break; } } listener.onMusicSwitch(songInfo); } } }
public static MediaMetadataCompat getMetadata(Context context, String mediaId) { MediaMetadataCompat metadataWithoutBitmap = music.get(mediaId); Bitmap albumArt = getAlbumBitmap(context, mediaId); // Since MediaMetadataCompat is immutable, we need to create a copy to set the album art. // We don't set it initially on all items so that they don't take unnecessary memory. MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); for (String key : new String[]{ MediaMetadataCompat.METADATA_KEY_MEDIA_ID, MediaMetadataCompat.METADATA_KEY_ALBUM, MediaMetadataCompat.METADATA_KEY_ARTIST, MediaMetadataCompat.METADATA_KEY_GENRE, MediaMetadataCompat.METADATA_KEY_TITLE }) { builder.putString(key, metadataWithoutBitmap.getString(key)); } builder.putLong( MediaMetadataCompat.METADATA_KEY_DURATION, metadataWithoutBitmap.getLong(MediaMetadataCompat.METADATA_KEY_DURATION)); builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, albumArt); return builder.build(); }
String songId = mMetadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID); int smallIcon = mConstructor.getSmallIconRes() != -1 ? mConstructor.getSmallIconRes() : R.drawable.ic_notification;
Class clazz = NotificationUtils.getTargetClass(mConstructor.getTargetClass()); if (clazz != null) { String songId = mMetadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID); notificationBuilder.setContentIntent(NotificationUtils.createContentIntent(mService, mConstructor, songId, null, clazz));
case PlaybackStateCompat.STATE_NONE: SongInfo songInfo = null; String songId = nowPlaying.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID); List<SongInfo> songInfos = MusicProvider.getInstance().getSongInfos(); for (SongInfo info : songInfos) {
MediaMetadataCompat track = mMusicProvider.getMusic(item.getDescription().getMediaId()); String source = track.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI); if (source != null) { source = source.replaceAll(" ", "%20"); // Escape spaces for URLs