不幸的是,用户体验指南中的信息并不准确。RemoteControlClient目前不支持"停止"按钮(在奇怪的情况下,您可以使其可见,例如将状态设置为"缓冲",但这不是您想要的),因此您可以跳过"停止"键,这将是断开连接操作的自然选择。在按钮方面,您只能添加显示播放/暂停、下一个和上一个;FF和REW没有出现。最后,在平板电脑上(至少在Kitkat上),锁屏会显示应用程序的图标,但在手机上不会。总之,您不需要实现锁屏断开连接,也不需要(针对手机)品牌。
Google声明我需要在锁定屏幕上放置品牌、接收器名称和断开连接按钮。我不知道如何做到这一点,因为MediaMetadataRetriever中没有任何字段用于此数据。目前我正在做以下工作,我得到的只是艺术品、标题和控件。
remoteControlClient
.editMetadata(true)
.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, "Title")
.putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, bitmap)
.apply();
由于有人请求了周围的代码,这里有一些:
private LockscreenManager(Context context) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
ComponentName myEventReceiver = new ComponentName(context, MediaButtonIntentReceiver.class);
audioManager.registerMediaButtonEventReceiver(myEventReceiver);
if (remoteControlClient == null) {
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.setComponent(myEventReceiver);
remoteControlClient = new RemoteControlClient(PendingIntent.getBroadcast(context, 0, intent, 0));
audioManager.registerRemoteControlClient(remoteControlClient);
}
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
// android built-in lockscreen only supports play/pause/playpause/stop, previous, and next.
remoteControlClient.setTransportControlFlags(
RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE
| RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS
| RemoteControlClient.FLAG_KEY_MEDIA_NEXT);
}
public void setMetadata(Film film, Bitmap bitmap) {
remoteControlClient
.editMetadata(true)
.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, film.getDirectorString())
.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, film.getTitle())
.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, film.getDuration()/60)
.putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK, bitmap)
.apply();
}
public void requestAudioFocus(Context context) {
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
audioManager.requestAudioFocus(
new OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {}
},
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN);
}
public void removeLockscreenControls() {
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_STOPPED);
}
public void setLockscreenPaused() {
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED);
}
public void setLockscreenPlaying() {
remoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);
}
我建议生成一个动态位图,考虑到设备的高度和宽度,然后将该位图设置为
putBitmap(RemoteControlClient.MetadataEditor.BITMAP_KEY_ARTWORK,位图).apply();
在这个位图中,你可以有你的品牌名称,应用程序图标等。
我使用了这种技术来显示一个暂停按钮,并在屏幕锁定的背景中显示一个非常漂亮的图像。
问候