Rya*_*yan 6 notifications android playback android-8.0-oreo
自从添加对Android O的支持后,每当我的应用程序的媒体控制通知得到更新(元数据或播放状态更改)时,运行O的Android设备都会收到警报(音调或振动).我正在寻找一种方法来禁用此警报,因为它不适用于媒体样式通知.
这是我用来创建媒体控件通知的代码:
MediaDescriptionCompat description = metadata.getDescription();
String artistName = metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST);
String albumName = metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM);
Bitmap largeIcon = BitmapFactory.decodeResource(playbackService.getResources(),
R.drawable.vector_global_defaultsong);
NotificationCompat.Builder notificationBuilder = new NotificationCompat
.Builder(playbackService, NotificationHelper.CHANNEL_MEDIA_CONTROLS)
.setColor(ContextCompat.getColor(playbackService, R.color.colorAccent))
.setSmallIcon(R.drawable.logo_light_filled)
.setContentTitle(description.getTitle())
.setContentText(playbackService.getString(R.string.song_list_subtitle_format,
artistName, albumName))
.setContentIntent(createContentIntent())
.setDeleteIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(playbackService,
PlaybackStateCompat.ACTION_STOP))
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setOngoing(playbackState.getState() == PlaybackStateCompat.STATE_PLAYING)
.setLargeIcon(largeIcon);
notificationBuilder.setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle()
// show previous, play/pause, and next in compact view
.setShowActionsInCompactView(addActions(notificationBuilder))
.setMediaSession(sessionToken));
showNotification(notificationBuilder.build());
Run Code Online (Sandbox Code Playgroud)
...
private void showNotification(final Notification notification) {
if (!started) {
mediaController.registerCallback(mediaControllerCallback);
playbackService.startForeground(NOTIFICATION_ID, notification);
started = true;
} else {
notificationManager.notify(NOTIFICATION_ID, notification);
}
if (playbackState.getState() == PlaybackStateCompat.STATE_PAUSED) {
playbackService.stopForeground(false);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用来创建通知渠道的代码:
public static final String CHANNEL_MEDIA_CONTROLS = "media_controls";
public static void createNotificationChannels(Context context) {
if (android.os.Build.VERSION.SDK_INT >= 26) {
NotificationChannel mediaControlsChannel = new NotificationChannel(CHANNEL_MEDIA_CONTROLS,
context.getString(R.string.notification_channel_media_controls),
NotificationManager.IMPORTANCE_HIGH);
mediaControlsChannel.setShowBadge(false);
getNotificationManager(context).createNotificationChannel(mediaControlsChannel);
}
}
Run Code Online (Sandbox Code Playgroud)
更新:在通知通道上设置showBadge为false"似乎"不执行任何操作.当显示媒体控件通知时,我仍会在应用程序图标上收到徽章.所以看起来我设置的通知通道属性没有被应用.
ian*_*ake 18
根据向Android O迁移MediaStyle通知,您应该使用IMPORTANCE_LOW,它不包含任何声音 - IMPORTANCE_HIGH声道与声音相关联.
Android已经MediaStyle在托盘中重新排序了更高的通知,因此没有必要使用更高的重要性,就像以前的Android版本一样.
注意:更改重要性后,您需要清除应用程序数据或重新安装应用程序,以使此更改在通知渠道中生效.
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |