2014-12-13 53 views
0

因此,我使用以下代码尝试在蓝牙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

你在测试什么? 'RemoteControlClient'只适用于几个Android版本,并且在Android 5.0上不再支持。 – CommonsWare 2014-12-13 12:31:17

+0

我使用5.0并知道它已被弃用。这是否意味着它根本不起作用?我认为这意味着它将在未来的版本中被删除。 – 2014-12-13 12:36:04

回答

1

我使用的是5.0

然后RemoteControlClient将无法​​正常工作。

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

正确。引用the documentation

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

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

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

+0

我不想发出通知,我正在通过蓝牙发送AVRCP数据。正在使用新的'MediaSession'正确的方式去? – 2014-12-13 12:55:20

+0

@jackwilsdon:我不能说,因为我还没有玩'MediaSession'。值得一试。 – CommonsWare 2014-12-13 12:56:37

+0

玩过之后,它看起来不像是通过蓝牙发送AVRCP数据。 – 2014-12-13 13:29:07