using System;
using Android.App;
using Android.Os;
using Android.Widget;
using Dot42;
using Dot42.Manifest;
using Android.Location;
[assembly:UsesPermission(Android.Manifest.Permission.ACCESS_COARSE_LOCATION)]
[assembly:UsesPermission(Android.Manifest.Permission.INTERNET)]
[assembly:UsesPermission(Android.Manifest.Permission.ACCESS_FINE_LOCATION)]
[assembly: Application("simplegps")]
namespace simplegps
{
[Activity]
public class MainActivity : Activity
{
private LocationManager service;
private bool enable;
private string provider;
protected override void OnCreate(Bundle savedInstance)
{
base.OnCreate(savedInstance);
SetContentView(R.Layouts.MainLayout);
var txtprovider= FindViewById <TextView>(R.Ids.txtprovider);
var gpsstatus= FindViewById <TextView>(R.Ids.gpsstatus);
var txtcity = FindViewById<TextView>(R.Ids.txtcity);
var txtlat = FindViewById<TextView>(R.Ids.txtlat);
var txtlon = FindViewById<TextView>(R.Ids.txtlon);
service=(LocationManager)GetSystemService(LOCATION_SERVICE);
enable=service.IsProviderEnabled(LocationManager.GPS_PROVIDER);
if(enable)
{
gpsstatus.Text="Gps enabled";
}
else
{
gpsstatus.Text="Gps not enabled";
return;
}
var criteria = new Criteria{Accuracy = Criteria.ACCURACY_FINE};
provider = service.GetBestProvider(criteria,false);
var location = service.GetLastKnownLocation(provider);
if(location !=null)
{
txtprovider.Text=provider;
var latitude = location.Latitude;
var longitude = location.Longitude;
txtlat.Text=latitude.ToString();
txtlon.Text=longitude.ToString();
}
else
{
txtprovider.Text="no location";
return;
}
if(Geocoder.IsPresent())
{
Android.Location.Geocoder geo;
Android.Location.Address adds;
adds=geo.GetFromLocation(location.GetLatitude(),location.GetLongitude(),1);
}
}
}
}
错误讯息: 它显示错误“无法将类型'Java.Util.IList'隐式转换为'Android.Location.Address'。存在显式转换(您是否错过了转换?)(CS0266)”
答案 0 :(得分:0)
这是失败的行:
adds = geo.GetFromLocation(location.GetLatitude(), location.GetLongitude(), 1)
geo.GetFromLocation
返回Java.Util.IList<Address>
。 adds
的类型为Address
。因此编译错误。
使用索引运算符访问其中一个地址。
编辑
此外,您应该在使用之前初始化geo
:
Geocoder geo = new Geocoder(this, Locale.getDefault());
最后,GetFromLocation可能会返回null或空列表,因此请检查两者。