send track informations via A2DP/AVRCP

前端 未结 5 876
北海茫月
北海茫月 2020-12-04 11:46

I\'m trying to send track informations via A2DP/AVRCP. Right now, music is perfectly streamed, but on the \"receiver\" (ie: car audio), the \"track informations screen\" is

5条回答
  •  北海茫月
    2020-12-04 12:02

    You don't need to control SDK_INT if you are using Compat version of components. Below code tested with many car bluetooth devices and works like charm. Some devices don't understand some KEYs so it's better to use possible KEY. Reference. Don't forget to .build() after putBitmap not before

    public static void sendTrackInfo() {
    if(audioManager == null) {
        audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    }
    
    if (mMediaSession == null) {
        mMediaSession = new MediaSessionCompat(this, "PlayerServiceMediaSession");
        mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
        mMediaSession.setActive(true);
    }
    
    if (audioManager.isBluetoothA2dpOn()) {
        try {
            String songTitle = getTitle();
            String artistTitle = getArtist();
            String radioImageUri = getImagesArr().get(0);
            String songImageUri = getImagesArr().get(1);
            long duration = getDuration();
    
            final MediaMetadataCompat.Builder metadata = new MediaMetadataCompat.Builder();
    
            metadata.putString(MediaMetadataCompat.METADATA_KEY_TITLE, songTitle);
            metadata.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, songTitle);
            metadata.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artistTitle);
            metadata.putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST, artistTitle);
            metadata.putString(MediaMetadataCompat.METADATA_KEY_ART_URI, radioImageUri);
            metadata.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, radioImageUri);
            metadata.putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, songImageUri);
            metadata.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, duration);
    
            imageCounter = 0;
    
            Glide.with(act)
                    .load(Uri.parse(radioImageUri))
                    .asBitmap()
                    .into(new SimpleTarget(250, 250) {
                        @Override
                        public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
                            metadata.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bitmap);
                            metadata.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, bitmap);
    
                            imageCounter = imageCounter + 1;
    
                            if(imageCounter == 2) {
                                mMediaSession.setMetadata(metadata.build());
                            }
                        }
                    });
    
            Glide.with(act)
                    .load(Uri.parse(songImageUri))
                    .asBitmap()
                    .into(new SimpleTarget(250, 250) {
                        @Override
                        public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
                            metadata.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bitmap);
    
                            imageCounter = imageCounter + 1;
    
                            if(imageCounter == 2) {
                                mMediaSession.setMetadata(metadata.build());
                            }
                        }
                    });
        }
        catch (JSONException e) {
            e.printStackTrace();
        }
    }
    

    }

提交回复
热议问题