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