Trong ứng dụng của tôi, tôi đang sử dụng MediaSessionCompat
để xử lý phát âm thanh từ dịch vụ trình phát đa phương tiện của mình. Đặc biệt, tôi muốn phát sóng siêu dữ liệu của bài hát hiện tại tới các thiết bị bluetooth (hoạt động) và đặt hình ảnh màn hình khóa thành ảnh bìa album của bài hát hiện tại.MediaMetadataCompat METADATA_KEY_ART chỉ đặt hình ảnh lần đầu tiên
Tương tự như câu hỏi này: Set lock screen background in Android (like Spotify do)
Mỗi lần thay đổi bài hát, đầu tiên tôi rõ ràng ra khỏi hiện MediaMetadataCompat
và PlaybackStateCompat
từ MediaSessionCompat
như vậy:
mSession.setActive(false);
mSession.setMetadata(null);
mSession.setPlaybackState(null);
Sau đó, tôi tạo ra các trường hợp mới của những các lớp học với các nhà xây dựng tương ứng
MediaMetadataCompat metadata = new MediaMetadataCompat.Builder()
.putString(MediaMetadataCompat.METADATA_KEY_TITLE,
songName)
.putString(MediaMetadataCompat.METADATA_KEY_ARTIST,
artistName)
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM,
albumName)
.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, durationMs)
.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bitmap)
.build();
PlaybackStateCompat state = new PlaybackStateCompat.Builder()
.setActions(PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_PAUSE |
PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS)
.setState(PlaybackStateCompat.STATE_PLAYING, positionMs, 1.0f, SystemClock.elapsedRealtime())
.build();
Sau đó, tôi đặt siêu dữ liệu mới các MediaSessionCompat
mSession.setActive(true);
mSession.setMetadata(metadata);
mSession.setPlaybackState(state);
Trên thiết bị bluetooth của tôi, Siêu dữ liệu hoạt động tốt và thay đổi mỗi khi bài hát thay đổi. Tuy nhiên, trên điện thoại của tôi, bìa album màn hình khóa chỉ cập nhật lần đầu tiên. Tôi đã xác nhận rằng bitmap tôi đang thiết lập là hình ảnh mới nhưng hình ảnh không thay đổi.
Tôi cũng đang tạo thông báo kiểu phương tiện trong dịch vụ để cho phép người dùng kiểm soát nhạc từ thông báo liên tục và từ màn hình khóa của họ.
NotificationCompat.MediaStyle style = new NotificationCompat.MediaStyle();
style.setShowActionsInCompactView(0, 1, 2, 3, 4);
Intent intent = new Intent(this, DestinationActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(pendingIntent)
.setStyle(style)
.setContentTitle(songName)
.setContentText(artistName)
.setLargeIcon(bitmap);
// Code to set notification actions
startForeground(NOTIFICATION_ID_PLAYER_CONTROLS, builder.build());
Tuy nhiên, phương pháp setLargeIcon
cho thông báo phương tiện của tôi không ảnh hưởng đến bìa album được hiển thị trên màn hình khóa. Điều này làm cho nó hiển thị trong chính thông báo, nhưng không hiển thị trên nền màn hình khóa.
Dường như phương thức 'setVisibility' chỉ liên quan đến thông tin xuất hiện trên màn hình khóa an toàn. Thêm phương thức này vào thông báo Phương tiện của tôi đã không thay đổi hành vi –
@AndrewBrooke Bạn nên tạo thông báo ** mới ** và đăng thông báo đó mỗi khi thông tin thay đổi, tất nhiên. – pantos27
Đó là những gì tôi hiện đang làm. Thông báo được cập nhật nhưng hình ảnh trên màn hình khóa không phải là lần đầu tiên. –