RemoteControlClient未出现在锁定屏幕上

时间:2014-12-13 12:28:50

标签: android metadata android-mediaplayer avrcp

所以我正在使用以下代码尝试在蓝牙AVRCP兼容设备上显示元数据,但到目前为止还没有运气。

锁屏上没有出现任何控件,这让我相信RemoteControlClient`没有按预期工作。

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

ComponentName rec = new ComponentName(getPackageName(), MediaButtonReceiver.class.getName());
mAudioManager.registerMediaButtonEventReceiver(rec);

Intent i = new Intent(Intent.ACTION_MEDIA_BUTTON);
i.setComponent(rec);

PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
RemoteControlClient mRemoteControlClient = new RemoteControlClient(pi);

mAudioManager.registerRemoteControlClient(mRemoteControlClient);

int flags = RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS
    | RemoteControlClient.FLAG_KEY_MEDIA_NEXT
    | RemoteControlClient.FLAG_KEY_MEDIA_PLAY
    | RemoteControlClient.FLAG_KEY_MEDIA_PAUSE
    | RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE
    | RemoteControlClient.FLAG_KEY_MEDIA_STOP;

mRemoteControlClient.setTransportControlFlags(flags);

mAudioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN);

RemoteControlClient.MetadataEditor mEditor = mRemoteControlClient.editMetadata(true);
    mEditor.putString(MediaMetadataRetriever.METADATA_KEY_ARTIST, "RCC Artist");
    mEditor.putString(MediaMetadataRetriever.METADATA_KEY_TITLE, "RCC Title");
    mEditor.putString(MediaMetadataRetriever.METADATA_KEY_ALBUM, "RCC Album");
    mEditor.putLong(MediaMetadataRetriever.METADATA_KEY_DURATION, 6039000);
mEditor.apply();

mRemoteControlClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING);

按下按钮时,我正在执行此代码。

1 个答案:

答案 0 :(得分:1)

  

我使用5.0

然后RemoteControlClient无效。

  

这是否意味着它根本不起作用?

正确。引用the documentation

  

Android 5.0中的锁定屏幕不显示MediaSession或RemoteControlClient的传输控件。相反,您的应用可以通过通知从锁定屏幕提供媒体播放控制。这使您的应用程序可以更好地控制媒体按钮的显示,同时为锁定和解锁设备的用户提供一致的体验。

     

Android 5.0为此目的引入了一个新的Notification.MediaStyle模板。 Notification.MediaStyle将您使用Notification.Builder.addAction()添加的通知操作转换为嵌入在应用程序媒体播放通知中的紧凑按钮。将会话令牌传递给setSession()方法,以通知系统此通知控制正在进行的媒体会话。

     

确保将通知的可见性设置为VISIBILITY_PUBLIC,以便将通知标记为可在任何锁定屏幕上显示(安全或其他)。有关详细信息,请参阅锁定屏幕通知。