Android 在第'页中使用Device.OpenUri时,会在浏览器中打开两个选项卡;s-OnAppearing方法
当我打开Android的默认内置浏览器时,它会打开两个选项卡,而不是一个。 我有一个主页和一个第1页。在主页中,我有一个按钮,可以将用户指向第1页 Page1.xaml没有什么特别之处,因为它是默认的xaml模板。 Page1.xaml.cs:Android 在第'页中使用Device.OpenUri时,会在浏览器中打开两个选项卡;s-OnAppearing方法,android,xamarin,browser,xamarin.forms,uri,Android,Xamarin,Browser,Xamarin.forms,Uri,当我打开Android的默认内置浏览器时,它会打开两个选项卡,而不是一个。 我有一个主页和一个第1页。在主页中,我有一个按钮,可以将用户指向第1页 Page1.xaml没有什么特别之处,因为它是默认的xaml模板。 Page1.xaml.cs: public partial class Page1 : ContentPage { public Page1 () { InitializeComponent (); } protected overr
public partial class Page1 : ContentPage
{
public Page1 ()
{
InitializeComponent ();
}
protected override void OnAppearing()
{
base.OnAppearing();
Device.OpenUri(new Uri("https://stackoverflow.com"));
}
}
问题:当我进入Page1时,默认的Android浏览器(即Google Chrome)会打开网站的两个选项卡,而不是一个
更新:在调试时,我注意到只有在OnAppearing()方法中使用Device.OpenUri时才会出现此问题,因为在构造函数中使用时不会出现此问题
更新:我试图通过DependencyService使用本机(例如Android)机制,但这也不起作用:
var uri = Android.Net.Uri.Parse("https://stackoverflow.com");
var intent = new Intent(Intent.ActionView, uri );
intent.SetFlags(ActivityFlags.NewTask);
Application.Context.StartActivity(intent);
所以我认为这个问题一定是来自Android方面,而不是Xamarin.Forms
更新:奇怪的是,如果我在打开浏览器之前延迟了一段时间,如下面的代码所示,那么问题就不会再发生了:
protected override async void OnAppearing()
{
base.OnAppearing();
await Task.Delay(500);
Device.OpenUri(new Uri("https://stackoverflow.com"));
}
尽管这可能是解决这个问题的临时方法,但我希望有人能找到解决办法
当我进入Page1时,默认的Android浏览器(即Google Chrome)会打开网站的两个选项卡,而不是一个
我认为原因是调用了Device.OpenUri()
之后,OnAppearing()
再次启动了。当您从浏览器返回时,应该调用它,但它会更早调用。浏览器显示并启动了Page1
OnDisappearing()
。之后,第二个OnAppearing()
启动
在您的解决方案中,当您从浏览器返回时,第二个OnAppearing()
将被触发。但它会再次打开URI
我认为您应该将代码移动到其他位置,例如单击的按钮
或Page1()
例如:
public Page1 ()
{
InitializeComponent ();
Device.OpenUri(new Uri("https://stackoverflow.com"));
}
即使是第一次进入Page1,浏览器也会打开两个选项卡!实际上,当我一直在OnAppearing方法中放置断点时,它只触发了一次而不是两次。不过,您是对的,通过从浏览器返回,OnAppearing方法将再次被激发,但在我的实际项目中,我有一种机制,可以在返回页面时禁用打开浏览器,因此这不会在这里产生问题。@Vahid如果您在
设备.OpenUri()
之后设置断点,您将发现它被激发了两次。您是对的。但这对我来说很奇怪。为什么要发射两次?Device.OpenUri也调用OnAppearing吗?顺便问一句,为什么在等待任务时。Delay(500)放在Device.OpenUri()之前,OnAppearing只触发一次?@Vahid我认为第二个OnAppearing()
不是由Device.OpenUri()调用的。它可能与导航.PushAsync()
有关。如果我把Device.OpenUri()
放在主页的OnAppearing()
方法中,它就没有这个问题。我已就这一问题作了报告。我将继续关注它。