Почему MediaSession не меняет фон экрана блокировки (может быть проблема с размером растрового изображения: читайте для получения дополнительной информации)? - PullRequest
0 голосов
/ 18 февраля 2019

Я застрял в этой проблеме в последние 6 дней после глубокого исследования в медиа-сессии. Я нашел эту важную строку

  • Обложка альбома для отображения на экране блокировки.Изображение представляет собой растровое изображение с максимальным размером 320x320dp (если оно больше, оно уменьшено).

Теперь вот мой код сеанса мультимедиа и уведомления ...

MEDIA SESSION

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void initMediaSession()  {
    if (mediaSessionManager != null) return;
    mediaSessionManager = (android.media.session.MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
    mediaSession = new MediaSessionCompat(getApplicationContext(), "AudioPlayer");

    transportControls = mediaSession.getController().getTransportControls();

    mediaSession.setActive(true);

    mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);

    updateMetaData();

//=============callBacks of Methods==============================//

    mediaSession.setCallback(new MediaSessionCompat.Callback() {
        @Override
        public void onPlay() {
            play();
            super.onPlay();
        }


        @Override
        public void onSkipToNext() {
            next();
            super.onSkipToNext();
        }

        @Override
        public void onSkipToPrevious() {
            back();     
            super.onSkipToPrevious();
        }

    });
}

метод METADATA ...

 public void updateMetaData(){

    MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
    builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, Artist);
    builder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, Album);
    builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, Title);
   // builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM, bitmap1);
    builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bitmap1);
    mediaSession.setMetadata(builder.build());
}

Теперь УВЕДОМЛЕНИЕ ....

public void BuildNotificatio(){

//============Getting Bitmap for setting large icon==========//

    Bitmap bitmap;
    MediaMetadataRetriever   mmr = new MediaMetadataRetriever();
    mmr.setDataSource(PATH.get(position));
    byte[] data = mmr.getEmbeddedPicture();
    if (data != null) {
         bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

    } else {

   bitmap=BitmapFactory.decodeResource(getResources(),
          R.drawable.example_picture);
    }
//==========================================================//
    if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O) {
        Notification builder = new NotificationCompat.Builder(this, 
notification.CHANNEL_ID_ONE)
                .setShowWhen(false)
                .setStyle(new 
android.support.v4.media.app.NotificationCompat.MediaStyle()
                .setMediaSession(mediaSession.getSessionToken())
                        .setShowActionsInCompactView(0,1,2)
                .setShowCancelButton(true))
                .setSmallIcon(android.R.drawable.stat_sys_headset)
                .setColor(getResources().getColor(R.color.colorAccent))
                .setContentTitle(Title)
                .setContentText(Artist)
                .setLargeIcon(bitmap)

.addAction(android.R.drawable.ic_media_previous,"",backIntent)
                .addAction(index,"",playIntent)
                .addAction(android.R.drawable.ic_media_next,"",nextIntent)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .build();
        startForeground(Notification_ID,builder);
    }else{
        Notification notification = new NotificationCompat.Builder(this)
                .setStyle(new 
android.support.v4.media.app.NotificationCompat.MediaStyle()
                .setMediaSession(mediaSession.getSessionToken()))
                .setShowWhen(false)
                .setSmallIcon(android.R.drawable.stat_sys_headset)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setLargeIcon(bitmap)
                .build();
        startForeground(Notification_ID,notification);
    }
}

Все работает нормально, например, элементы управления на экране блокировки и т. Д., Но единственная проблема не в том, чтобы изменить обои экрана блокировки устройства

Как этого добиться ... ИЛИ

Как проверить размер dp растрового изображения или уменьшить растровое изображение до требуемого размера dp

Не стесняйтесь запрашивать дополнительную информацию

...