我正在尝试在xamarin表单应用程序中启用webview,以获取Android设备的当前GPS坐标。目前,当在手机或笔记本电脑上的Chrome浏览器中打开时,WebView/网站将返回GPS坐标,但在应用程序中不会。尝试让这个工作尽可能简单,并在之后扩展它。
到目前为止的代码:XAML页面:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="UITrial.Page2"
BackgroundColor = "#f0f0ea">
<Label Text="{Binding MainText}" VerticalOptions="Center" HorizontalOptions="Center" />
<WebView Source="https://danu6.it.nuigalway.ie/OliverInternetProgramming/project/Loginproject.html" />
</ContentPage>
HTML页面:
<!DOCTYPE html>
<html>
<body>
<p>Click the button to get your coordinates.</p>
<button onclick="getLocation()">Try It</button>
<p id="demo"></p>
<script>
var x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.watchPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";}
}
function showPosition(position) {
x.innerHTML="Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
</script>
</body>
</html>
3条答案
按热度按时间hivapdat1#
目前,当在手机或笔记本电脑上的Chrome浏览器中打开时,WebView/网站将返回GPS坐标,但在应用程序中不会。
您需要在Droid项目中为
WebView
使用自定义WebChromeClient
。请参阅Android WebView Geolocation。在Xamarin.Forms中,您可以按照以下步骤来完成此操作:
1.在PCL项目中为WebView创建自定义控件:
在Xaml中使用:
1.在Droid Project中为
GeoWebView
创建一个自定义渲染器,如下所示:1.向
AndroidManifest.xml
添加权限:然后,您将在webview中正确获取您的位置。
aelbi1ox2#
欢呼猫王设法让一切工作,不得不做一些小的变化,所以将张贴我所做的一切详细:
在App.xaml.cs中:
}
在MainPage.xaml中,确保您的网站是'https'
正如Elvis所说,然后需要在PLC项目中创建一个自定义控件。右键单击并添加新的“类”来执行此操作。
然后在Droid类中创建一个自定义渲染。最初这里有一些错误,主要是缺少“using”指令,以及“assembly”中需要的关键字。
在这些变化之后,一切都很完美。再次感谢猫王!
ztmd8pv53#
对于Android API 23及更高版本,这同样可以使用
Xamarin.Essentials
命名空间来实现。1.确保您已请求Manifest文件中的所有适当权限。在写这篇文章的时候,这些是我需要的:
1.为
WebView
创建一个自定义渲染器,并创建一个要使用的自定义WebChromeClient
。瞧!