Обновление карты Real TIme - PullRequest
       5

Обновление карты Real TIme

1 голос
/ 27 октября 2019

Я использую карты Google и службы определения местоположения Android, однако, даже когда я перемещаю устройство, метод не обновляет интерфейс. Я запросил разрешение на использование местоположения, которое я предположил бы, когда я переместил устройство, что

locationObtained будет получать обновленную информацию о широте и долготе, когда пользователь перемещал устройство, но это только кажется, чтобы получить егоодин раз.

double lat=0.00;
double lng=0.00;
var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location);
if (status != PermissionStatus.Granted)
{
    if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location))
    {
         await DisplayAlert("Need location", "Gunna need that location", "OK                     
    }
    var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Location);
         status = results[Permission.Location];
}
if (status == PermissionStatus.Granted)
{
    ILocation loc = DependencyService.Get<ILocation>();
    loc.locationObtained += (object ss, ILocationEventArgs ee) =>
    {
         loc.ObtainMyLocation();
         lat = ee.lat;
         lng = ee.lng;

         lbllat.Text = ee.lat.ToString();
         lbllong.Text = ee.lng.ToString();

    };
        Position position = new Position(lat, lng);
        map.Pins.Add(_pinTokyo2);    

    }
}

Это класс, который я использую для получения местоположения с помощью службы зависимостей.

namespace Fitnessbudy.Droid
{
    public class LocationEventArgs : EventArgs, ILocationEventArgs
    {
        public double lat { get; set; }
        public double lng { get; set; }
    }

    public class GetMyLocation : Java.Lang.Object, ILocation, ILocationListener
    {
        public event EventHandler<ILocationEventArgs> locationObtained;

        public void ObtainMyLocation()
        {
            LocationManager lm = (LocationManager)Forms.Context.GetSystemService(Context.LocationService);
            lm.RequestLocationUpdates(LocationManager.NetworkProvider, 0, 0, this);

        }

        public void OnLocationChanged(Location location)
        {
            if (location != null)
            {
                LocationEventArgs args = new LocationEventArgs();
                args.lat = location.Latitude;
                args.lng = location.Longitude;
                locationObtained(this, args);
            }
        }

        public void OnProviderDisabled(string provider)
        {
        }

        public void OnProviderEnabled(string provider)
        {
        }

        public void OnStatusChanged(string provider, [GeneratedEnum] Availability status, Bundle extras)
        {
        }
    }
 }

Это мой файл манифеста

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.fitnessbudy" android:installLocation="auto">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
    <application android:label="Fitnessbudy.Android"></application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" />
</manifest>

Iудостоверился, что я был в режиме выпуска. Так что это разрешение предоставлено.

1 Ответ

1 голос
/ 27 октября 2019

Ваш звонок на loc.ObtainMyLocation находится внутри обратного вызова, поэтому обновления вашего местоположения не инициализируются.

~~~
ILocation loc = DependencyService.Get<ILocation>();
loc.locationObtained += (object ss, ILocationEventArgs ee) =>
{
     lat = ee.lat;
     lng = ee.lng;

     lbllat.Text = ee.lat.ToString();
     lbllong.Text = ee.lng.ToString();

};
loc.ObtainMyLocation();
~~~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...