我们正在将正在进行的播放通知迁移到Lollipop中引入的MediaStyle通知. RemoteControlClient似乎已被弃用,MediaStyle通知不处理媒体按钮事件(例如通过耳机远程暂停/播放).
有没有人得到这项工作? MediaSessionCallback中没有任何事件被调用.
以下是媒体会话的初始化方式
mSession = new MediaSessionCompat(this,TAG); mSession.setCallback(new MediaSessionCallback()); mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mSession.setPlaybackToLocal(AudioManager.STREAM_MUSIC); mSession.setActive(true);
以下是设置元数据的方式
MediaMetadataCompat.Builder metadataBuilder = new MediaMetadataCompat.Builder(); metadataBuilder .putLong(MediaMetadata.METADATA_KEY_DURATION,clip.getDuration()) .putString(MediaMetadata.METADATA_KEY_MEDIA_ID,clip.getClipId()) .putString(MediaMetadata.METADATA_KEY_TITLE,clip.getTitle()) .putString(MediaMetadata.METADATA_KEY_ARTIST,clip.getSourceName()) .putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI,clip.getImageUrl()) .putLong(MediaMetadata.METADATA_KEY_DURATION,clip.getDuration()); mSession.setMetadata(metadataBuilder.build());
最后,通知代码:
MediaSession mediaSession = (MediaSession) session.getMediaSession(); Notification.Builder builder = new Notification.Builder(c) .setDefaults(0) .setSmallIcon(R.drawable.ic_notif) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setContentTitle(clip.getTitle()) .setContentText(clip.getSourceName()) .setProgress((int)duration,(int)progress,false) .setWhen(0) .setContentIntent(pendingIntent); if (playing) { builder.addAction(R.drawable.ic_media_pause,c.getString(R.string.media_pause),getPendingIntentForKeyCode(app.getApplicationContext(),KeyEvent.KEYCODE_MEDIA_PAUSE)); } else { builder.addAction(R.drawable.ic_media_play,c.getString(R.string.media_play),KeyEvent.KEYCODE_MEDIA_PLAY)); } builder.addAction(R.drawable.ic_media_next,c.getString(R.string.media_next),KeyEvent.KEYCODE_MEDIA_NEXT)); builder.setStyle(new Notification.MediaStyle() .setMediaSession(mediaSession.getSessionToken()) .setShowActionsInCompactView(new int[] {1,2}) ) ); notification = builder.build();
解决方法
使用您支持的操作在MediaSession中设置播放状态:
PlaybackState state = new PlaybackState.Builder() .setActions( PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE | PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIOUS) .setState(PlaybackState.STATE_PLAYING,position,speed,SystemClock.elapsedRealtime()) .build(); mSession.setPlaybackState(state);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。