AndroidChromecastSDK(Xamarin 绑定):获取 RemoteMediaPlayer.MediaStatus 总是 return null
AndroidChromecastSDK (Xamarin Bindings) : Getting the RemoteMediaPlayer.MediaStatus always return null
我正在使用 Xamarin 在 C# 中为 chromecast 开发自定义发件人应用程序。此时,我可以将 MediaInfo
发送到接收器应用程序并在我的电视上正确播放歌曲。我遇到的问题是当我试图停止 RemoteMediaPlayer
时。
在播放器 returns 上调用 Stop()
Java.Lang.IllegalStateException : No current media session
异常。这很奇怪,因为我能听到音乐在播放,所以一定有一个活动的媒体会话...
此外,我尝试像这样设置 OnStatusUpdatedListener
(AndroidMediaPlayer
继承自 RemoteMediaPlayer
)
mediaPlayer = new AndroidMediaPlayer();
mediaPlayer.SetOnStatusUpdatedListener(new AndroidMediaPlayerOnStatusUpdated(this, mediaPlayer));
使用接口的自定义实现
internal class AndroidMediaPlayerOnStatusUpdated: Java.Lang.Object, RemoteMediaPlayer.IOnStatusUpdatedListener {
private readonly AndroidChromecastController controller;
private readonly RemoteMediaPlayer mediaPlayer;
public AndroidMediaPlayerOnStatusUpdated(AndroidChromecastController aController, RemoteMediaPlayer aMediaPlayer) {
controller = aController;
mediaPlayer = aMediaPlayer;
}
public void OnStatusUpdated()
{
var status = mediaPlayer.MediaStatus;
switch (status.PlayerState)
{
case MediaStatus.PlayerStateBuffering:
break;
case MediaStatus.PlayerStateIdle:
break;
case MediaStatus.PlayerStatePaused:
break;
case MediaStatus.PlayerStatePlaying:
break;
case MediaStatus.PlayerStateUnknown:
break;
}
}
}
OnStatusUpdated
方法永远不会被调用,即使我在 RemoteMediaPlayer
.
上调用 RequestStatus
方法也是如此
Xamarin 的 GooglePlayServices
绑定是否有我做错的事情或某些事情不起作用?
在此先致谢,如果需要,我可以提供说明!
对于可能遇到此问题的任何人,请注意您需要使用此行:
CastClass.CastApi.SetMessageReceivedCallbacks(googleApiClient, mediaPlayer.Namespace, mediaPlayer);
其中 mediaPlayer 是 RemoteMediaPlayer。
我的问题是我使用的是 RemoteMediaPlayer 的自定义实现,我将 Namespace get 属性覆盖为 return 我喜欢的 Namespace,这没关系与文档。看这里:
https://developer.android.com/reference/com/google/android/gms/cast/Cast.CastApi.html#setMessageReceivedCallbacks(com.google.android.gms.common.api.GoogleApiClient, java.lang.String, com.google.android.gms.cast.Cast.MessageReceivedCallback)
(出于某种原因,link 中有一个 space(我无法删除它,因为它会破坏 link)并且它正在破坏 link本网站的方法,但是如果您复制并粘贴它,link 是正确的...抱歉)
即使我的名字space是他们想要的格式,它也行不通。但它不会抛出任何异常。
我正在使用 Xamarin 在 C# 中为 chromecast 开发自定义发件人应用程序。此时,我可以将 MediaInfo
发送到接收器应用程序并在我的电视上正确播放歌曲。我遇到的问题是当我试图停止 RemoteMediaPlayer
时。
在播放器 returns 上调用 Stop()
Java.Lang.IllegalStateException : No current media session
异常。这很奇怪,因为我能听到音乐在播放,所以一定有一个活动的媒体会话...
此外,我尝试像这样设置 OnStatusUpdatedListener
(AndroidMediaPlayer
继承自 RemoteMediaPlayer
)
mediaPlayer = new AndroidMediaPlayer();
mediaPlayer.SetOnStatusUpdatedListener(new AndroidMediaPlayerOnStatusUpdated(this, mediaPlayer));
使用接口的自定义实现
internal class AndroidMediaPlayerOnStatusUpdated: Java.Lang.Object, RemoteMediaPlayer.IOnStatusUpdatedListener {
private readonly AndroidChromecastController controller;
private readonly RemoteMediaPlayer mediaPlayer;
public AndroidMediaPlayerOnStatusUpdated(AndroidChromecastController aController, RemoteMediaPlayer aMediaPlayer) {
controller = aController;
mediaPlayer = aMediaPlayer;
}
public void OnStatusUpdated()
{
var status = mediaPlayer.MediaStatus;
switch (status.PlayerState)
{
case MediaStatus.PlayerStateBuffering:
break;
case MediaStatus.PlayerStateIdle:
break;
case MediaStatus.PlayerStatePaused:
break;
case MediaStatus.PlayerStatePlaying:
break;
case MediaStatus.PlayerStateUnknown:
break;
}
}
}
OnStatusUpdated
方法永远不会被调用,即使我在 RemoteMediaPlayer
.
RequestStatus
方法也是如此
Xamarin 的 GooglePlayServices
绑定是否有我做错的事情或某些事情不起作用?
在此先致谢,如果需要,我可以提供说明!
对于可能遇到此问题的任何人,请注意您需要使用此行:
CastClass.CastApi.SetMessageReceivedCallbacks(googleApiClient, mediaPlayer.Namespace, mediaPlayer);
其中 mediaPlayer 是 RemoteMediaPlayer。
我的问题是我使用的是 RemoteMediaPlayer 的自定义实现,我将 Namespace get 属性覆盖为 return 我喜欢的 Namespace,这没关系与文档。看这里:
https://developer.android.com/reference/com/google/android/gms/cast/Cast.CastApi.html#setMessageReceivedCallbacks(com.google.android.gms.common.api.GoogleApiClient, java.lang.String, com.google.android.gms.cast.Cast.MessageReceivedCallback)
(出于某种原因,link 中有一个 space(我无法删除它,因为它会破坏 link)并且它正在破坏 link本网站的方法,但是如果您复制并粘贴它,link 是正确的...抱歉)
即使我的名字space是他们想要的格式,它也行不通。但它不会抛出任何异常。