내 응용 프로그램 용 iOS 및 Android OS를 지원하는 Xamarin.Forms PCL 앱을 작성하고 있습니다.Xamarin.Forms 및 GoogleMaps/GeoLocation 사용 방법
루트 프로젝트에는 ViewList와지도 (Xamarin.Forms.Maps)가 포함 된보기가 있습니다.
나는 맞춤 동작을 추가하기 위해 각 플랫폼마다 CustomRenderer를 사용해야한다는 것을 알게되었습니다. LocationManager/GeoLocation을 추가하여 GPS를 통해 사용자 위치를 식별하고 핀/마커로 자신의 위치를 표시하려고합니다. 또한 필자는 몇몇 사람들의 루트 프로젝트에서지도를 보여 주어야한다.
기능을 내보내는 인터페이스를 사용해야하거나 적절한 사용자 정의 맵 렌더러를 사용해야합니까?
Xamarin.Forms 웹 사이트의 사례와 Stackoverflow 내의 연구는 힌트를 제공하지 않습니다.
using System;
using Awesome;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using Plugin.Geolocator;
using System.Threading.Tasks;
namespace KiLa
{
public class KidsFinder : ContentPage, ITabPage
{
public string TabIcon => FontAwesome.FAMapMarker;
public string SelectedTabIcon => FontAwesome.FAMapMarker;
private Boolean _showKidsList;
private ListView _listView;
public ObservableCollection<KidsViewModel> kidsList = new ObservableCollection<KidsViewModel>();
public KidsFinder()
{
Title = "KidsFinder";
// Define listView
// Any near/identified kids? Mockup
// TODO: get real data
Boolean kidsPresent = true;
// Initial height of map
double mapHeight = 300.0;
// coordinates of Beuth Hochschule, Haus Gauss
double latitude = 52.543100;
double longitude = 13.351450;
// Show/hide kidsList (listView)
//Boolean showKidsList = false;
_showKidsList = false;
// Define toggleButton
Button toggleButton = new Button();
toggleButton.Text = "Verstecke Liste";
toggleButton.Clicked += new EventHandler(OnClickEvent);
if(kidsPresent == true)
{
toggleButton.IsVisible = true;
mapHeight = 200.0;
_showKidsList = true;
} else
{
toggleButton.IsVisible = false;
mapHeight = 300.0;
_showKidsList = false;
}
// Mockup some kids
Position pos1 = new Position(latitude + 0.002, longitude + 0.002);
Position pos2 = new Position (latitude - 0.002, longitude - 0.002);
kidsList.Add(new KidsViewModel{Name="Tim", ActualPositon=pos1, DistanceToEducator=5.4});
kidsList.Add(new KidsViewModel{Name="Sabine", ActualPositon=pos2, DistanceToEducator=20.4});
_listView = new ListView();
_listView.ItemsSource = kidsList;
//listView.VerticalOptions = LayoutOptions.FillAndExpand;
_listView.ItemTemplate = new DataTemplate (typeof(KidsCustomCell));
_listView.RowHeight = 50;
if (_showKidsList == false) {
_listView.IsVisible = false;
} else {
_listView.IsVisible = true;
}
// Define mapView
var kidsMap = new KidsMap();
kidsMap.MapType = MapType.Street;
kidsMap.WidthRequest = 960;
kidsMap.HeightRequest = mapHeight;
kidsMap.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(latitude,longitude), Distance.FromMiles(0.3)));
// Set label of pins with kids names,
foreach (KidsViewModel kvm in kidsList) {
Pin pin = new Pin() {
Label = kvm.Name,
Position = kvm.ActualPositon
};
kidsMap.Pins.Add(pin);
}
https://developer.xamarin.com/recipes/android/os_device_resources/gps/get_current_device_location/이 답변 주셔서 감사합니다. 이미 시도한 URL입니다. 하지만 내 코드는 사용자 장치의 현재 위치를 가져올 수 없습니다. 코드를 실행할 때 코드 '_currentLocation = _locationManager.GetLastKnownLocation (_locationProvider);' null 포인터를 throw합니다. 마지막으로 알려진 위치가없는 경우 어떻게 현재 위치를 얻습니까? "OnLocationChanged"는 사용자가 자신의 위치를 변경하는 경우에만 호출되지만 초기화시 첫 번째 위치는 가져 오지 않습니다. – Pille
업데이트 : "OnLocationChanged"가 호출 된 적이 없기 때문에 "RequestUpdate"로 거리를 0 미터로 변경했습니다. – Pille