C# 当最小化并恢复时,Xamarin格式的视频播放器将消失

C# 当最小化并恢复时,Xamarin格式的视频播放器将消失,c#,xamarin.forms,android-mediaplayer,android-videoview,C#,Xamarin.forms,Android Mediaplayer,Android Videoview,我在xamarin表单中实现了一个视频播放器,可以作为登录屏幕的背景视频播放。视频在开始时成功加载并在没有声音和循环的情况下播放(如配置)。但问题是,当我最小化应用程序并再次恢复时,视频消失了,我甚至无法播放它,就像视频。如果暂停或停止播放 我尝试的链接如下 (我先尝试了这个链接) (然后完全替换为此) 除了两个链接中相同的问题外,两个链接都可以按需要工作 我试图解决的问题是什么 我尝试在我的OnAppearing()方法中以if(videoPlayer.Status==Renderers.Vi

我在xamarin表单中实现了一个视频播放器,可以作为登录屏幕的背景视频播放。视频在开始时成功加载并在没有声音和循环的情况下播放(如配置)。但问题是,当我最小化应用程序并再次恢复时,视频消失了,我甚至无法播放它,就像
视频。如果暂停或停止播放

我尝试的链接如下

  • (我先尝试了这个链接)
  • (然后完全替换为此)
  • 除了两个链接中相同的问题外,两个链接都可以按需要工作

    我试图解决的问题是什么

  • 我尝试在我的
    OnAppearing()方法中以
    if(videoPlayer.Status==Renderers.VideoStatus.Paused)videoPlayer.Play()的形式恢复视频。但它不起作用
  • 我目前正在尝试从堆栈布局中的代码后面动态加载视频。但是我不知道如何设置视频源代码。我是这样做的

  • 出现错误,说明无法将字符串转换为源

    帮助链接:

    当应用程序进入后台时,视频视图似乎无法保持其状态

    我目前正在尝试从堆栈布局中的代码后面动态加载视频。但是我不知道如何设置视频源代码。我是这样做的

    我注意到您的路径来自本地资源,您可以使用以下代码加载视频。如果路径是URL,则可以使用
    videoPlayer.Source=VideoSource.FromUri(Source)以加载它

      var videoPlayer=new VideoPlayer();
    
                string source = "";
                switch (Device.RuntimePlatform)
                {
                    case Device.iOS:
                        source = "Videos/iOSApiVideo.mp4";
                        break;
                    case Device.Android:
                        source = "AndroidApiVideo.mp4";
                        break;
                    default:
                        source = "AndroidApiVideo.mp4";
                        break;
                }
                videoPlayer.Source = VideoSource.FromResource(source);
    
    我试图恢复视频,就像在OnAppearing()方法中的(videoPlayer.Status==Renderers.VideoStatus.Paused)videoPlayer.Play()一样。但它不起作用

    这是我运行的演示结果,当我回到我的应用程序时,它工作了。我还实现了查找上一个时间跨度函数

    这是我的演示


    我使用定时器作为一种解决方法来恢复视频,该视频在应用程序进入睡眠模式时暂停

    protected override void OnAppearing()
    {
        base.OnAppearing();
        shouldTimerRun = true;
    
        Device.StartTimer(new TimeSpan(0, 0, 1), () =>
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                if (videoPlayer.Status == VideoStatus.Paused)
                {
                    //videoPlayer.TimeToEnd = timeSpan;
                    videoPlayer.Position = timeSpan;
                    videoPlayer.Play();
                }
            });
            return shouldTimerRun;
        });
    }
    
    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        shouldTimerRun = false;
        timeSpan = videoPlayer.Position;
    }
    

    如果以上答案有帮助,请不要忘记将其作为答案接受(单击“✔” 在这个答案的左上角),它将帮助其他有类似问题的人Hi@Leon。我尝试了你的代码。但仍然是相同的问题。@Thameem请发布你的演示。这是我的代码。当我在驱动器中运行你的项目时,它按预期工作。无法找出我的错误所在。感谢你的分享,请接受你的答案。它将帮助其他有类似问题的人问题
    protected override void OnAppearing()
    {
        base.OnAppearing();
        shouldTimerRun = true;
    
        Device.StartTimer(new TimeSpan(0, 0, 1), () =>
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                if (videoPlayer.Status == VideoStatus.Paused)
                {
                    //videoPlayer.TimeToEnd = timeSpan;
                    videoPlayer.Position = timeSpan;
                    videoPlayer.Play();
                }
            });
            return shouldTimerRun;
        });
    }
    
    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        shouldTimerRun = false;
        timeSpan = videoPlayer.Position;
    }