gpt4 book ai didi

java - 将 java 翻译成 c#

转载 作者:行者123 更新时间:2023-12-02 09:36:11 25 4
gpt4 key购买 nike

我正在尝试为我的 Android 版 xamarin 媒体应用程序提供锁屏控制。我还没有很幸运,但一直在尝试遵循 https://www.youtube.com/watch?v=KNsELLrZ3V0 中找到的本教程。 。我已将其中大部分实现到我的项目中,但有一部分我不确定将他们的 java 转换为我的 C# 时如何进行。我将发布下面的代码,但跳到我正在谈论的视频中的部分可能会更容易。

在视频的 6:50 处,他们开始构建 initMediaSession 方法,这就是我陷入困境的地方。特别是在 mSession.SetCallback 部分。我不知道 C# 将如何执行下面的重载方法,而且我也无法让 mSession.SetCallback(new MediaSession.Callback(){} 不出错。

我遇到的主要错误是“无法创建抽象类或接口(interface)“MediaSession.Callback”的实例”

或者,如果您有更好的策略将媒体控件添加到 Android 锁定屏幕上,请告诉我。谢谢。

private void initMediaSession()
{
DabPlayer dabPlayer = new DabPlayer(true);

mSession = new MediaSession(Application.Context, "example player sesion");
mController = new Android.Media.Session.MediaController(Application.Context, mSession.SessionToken);

mSession.SetCallback(new MediaSession.Callback() {
@Override
public void onPlay() {
SuperSocket.onPlay();
buildNotification(generateAction(Android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE));
}

@Override
public void onPause()
{
SuperSocket.onPlay();
buildNotification(generateAction(Android.R.drawable.ic_media_play, "Play", ACTION_PLAY));
}

@Override
public void onSkipToNext()
{
SuperSocket.onPlay();
buildNotification(generateAction(Android.R.drawable.ic_media_pause, "Pause", ACTION_PAUSE));
}

@Override
public void onFastForward()
{
super.onFastFoward();
}

@Override
public void onRewind()
{
super.onRewind();
}

@Override
public void onRewind()
{
super.onStop();
}

@Override
public void onStop()
{
super.onStop();
NotificationManager notificationManager = (NotificationManager)getApplicaitonContext().getSystemService(Context.NotificationService);
notificationManager.Cancel(1);
Intent intent = new Intent(getApplicationContext(), MediaPlayerService.class);
stopService(intent);
}

});

最佳答案

您不必翻译任何内容,只需实现现有的 MediaSession.Callback 接口(interface)即可。

class MediaSessionCallback : MediaSession.Callback
{
public Action OnPlayImpl { get; set; }

public Action<long> OnSkipToQueueItemImpl { get; set; }

public Action<long> OnSeekToImpl { get; set; }

public Action<string, Bundle> OnPlayFromMediaIdImpl { get; set; }

public Action OnPauseImpl { get; set; }

public Action OnStopImpl{ get; set; }

public Action OnSkipToNextImpl{ get; set; }

public Action OnSkipToPreviousImpl{ get; set; }

public Action<string, Bundle> OnCustomActionImpl { get; set; }

public Action<string, Bundle> OnPlayFromSearchImpl { get; set; }

public override void OnPlay ()
{
OnPlayImpl ();
}

public override void OnSkipToQueueItem (long id)
{
OnSkipToQueueItemImpl (id);
}

public override void OnSeekTo (long pos)
{
OnSeekToImpl (pos);
}

public override void OnPlayFromMediaId (string mediaId, Bundle extras)
{
OnPlayFromMediaIdImpl (mediaId, extras);
}

public override void OnPause ()
{
OnPauseImpl ();
}

public override void OnStop ()
{
OnStopImpl ();
}

public override void OnSkipToNext ()
{
OnSkipToNextImpl ();
}

public override void OnSkipToPrevious ()
{
OnSkipToPreviousImpl ();
}

public override void OnCustomAction (string action, Bundle extras)
{
OnCustomActionImpl (action, extras);
}

public override void OnPlayFromSearch (string query, Bundle extras)
{
OnPlayFromSearchImpl (query, extras);
}
}

并像这样使用它:

var mediaCallback = new MediaSessionCallback ();

mediaCallback.OnPlayImpl = () => {
LogHelper.Debug (Tag, "play");

};

mediaCallback.OnSkipToQueueItemImpl = (id) => {
LogHelper.Debug (Tag, "OnSkipToQueueItem:" + id);

};

mediaCallback.OnSeekToImpl = (pos) => {
LogHelper.Debug (Tag, "onSeekTo:", pos);

};

mediaCallback.OnPlayFromMediaIdImpl = (mediaId, extras) => {
LogHelper.Debug (Tag, "playFromMediaId mediaId:", mediaId, " extras=", extras);

};

mediaCallback.OnPauseImpl = () => {
LogHelper.Debug (Tag, "pause. current state=" + playback.State);

};

mediaCallback.OnStopImpl = () => {
LogHelper.Debug (Tag, "stop. current state=" + playback.State);

};

mediaCallback.OnSkipToNextImpl = () => {
LogHelper.Debug (Tag, "skipToNext");

};

mediaCallback.OnSkipToPreviousImpl = () => {

};

mediaCallback.OnCustomActionImpl = (action, extras) => {

};

mediaCallback.OnPlayFromSearchImpl = (query, extras) => {
LogHelper.Debug (Tag, "playFromSearch query=", query);

};

幸运的是,甚至还有一个用于实现音乐服务的示例:

https://github.com/xamarin/monodroid-samples/blob/master/android5.0/MediaBrowserService/MediaBrowserService/MusicService.cs

关于java - 将 java 翻译成 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57497914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com