Location Fragment mit Map - Camera zoomt nicht in die Map? C#

  • Antworten:3
  • Bentwortet
Lukas R.
  • Forum-Beiträge: 180

02.02.2015, 11:10:32 via Website

Hei Leute
Ich habe ein Fragment dass mit einer Map verknüpft ist.
In dieser Map soll die App automatisch zur Position hineinzoomen.
Doch irgendwie gelingt es mir nicht dass die kamera selbstständig zur position hineinzoomt.
Der Code ist ähnlich aufgebaut wie in Java also die die nur Java können können hier auch helfen!

Hier mal der code:
Fällt jemanden was auf?

     using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.Locations;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;


namespace HKEDV_GPS
{
    public class MapFragment : Fragment, ILocationListener
    {
        //Für Location/Map
        public Location currentLocation;
        LocationManager locationManager;
        public GoogleMap map;

        //Strings
        public string locationProvider;
        public string locationText;
        public LatLng locationPoint;

        //Camera 
        CameraUpdate cameraUpdate;
        CameraPosition cameraPosition;

        // Fragment wird definiert
        public static Fragment NewInstance(int position)
        {
            Fragment fragment = new MapFragment();
            Bundle args = new Bundle();
            return fragment;
        }


        // Layout wird angegeben
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            //Besten Provider suchen
            locationManager = (LocationManager)Activity.GetSystemService(Context.LocationService);
            var locationCriteria = new Criteria();
            locationCriteria.Accuracy = Accuracy.Fine;
            locationCriteria.PowerRequirement = Power.NoRequirement;
            IList<string> acceptableLocationProviders = locationManager.GetProviders(locationCriteria, true);


            //Wenn kein Provider vorhanden = string.Empty
            if (acceptableLocationProviders.Any ()) {
                locationProvider = acceptableLocationProviders.First ();
            } else {
                locationProvider = String.Empty;
                Toast.MakeText (Activity, "Keine Provider gefunden", ToastLength.Short).Show ();
            };


            return inflater.Inflate(Resource.Layout.map, container, false);
        }


        public void StartLocationUpdates(Location location)
        {
            var locationCriteria = new Criteria();
            locationCriteria.Accuracy = Accuracy.Fine;
            locationCriteria.PowerRequirement = Power.NoRequirement;

            locationProvider = locationManager.GetBestProvider(locationCriteria, true);
            locationManager.RequestLocationUpdates(locationProvider, 0, 0, this);

            currentLocation = location;

            //Position als String und LatLng ausgeben
            locationText = String.Format("{0},{1}", currentLocation.Latitude, currentLocation.Longitude);
            locationPoint = new LatLng(currentLocation.Latitude, currentLocation.Longitude);

            //Camera Builder
            CameraPosition.Builder builder = CameraPosition.InvokeBuilder();
            builder.Target(locationPoint);
            builder.Zoom(18);
            cameraPosition = builder.Build();
            cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition);

            //Camera soll zur Position zoomen
            map.MoveCamera(cameraUpdate);

        }


        //Wenn das Layout geladen ist
        public void OnResume(Location location)
        {
            base.OnResume();

            var locationCriteria = new Criteria();
            locationCriteria.Accuracy = Accuracy.Fine;
            locationCriteria.PowerRequirement = Power.NoRequirement;

            locationProvider = locationManager.GetBestProvider(locationCriteria, true);
            locationManager.RequestLocationUpdates(locationProvider, 0, 0, this);

            currentLocation = location;

            //Position als String und LatLng ausgeben
            locationText = String.Format("{0},{1}", currentLocation.Latitude, currentLocation.Longitude);
            locationPoint = new LatLng(currentLocation.Latitude, currentLocation.Longitude);

            //Camera Builder
            CameraPosition.Builder builder = CameraPosition.InvokeBuilder();
            builder.Target(locationPoint);
            builder.Zoom(18);
            cameraPosition = builder.Build();
            cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition);

            //Camera soll zur Position zoomen
            map.MoveCamera(cameraUpdate);
        }

        //Wenn im Hintergrund
        public override void OnPause()
        {
            base.OnPause();
            locationManager.RemoveUpdates(this);
        }


        //Wird aufgerufen wennn Position verändert wurde
        public void OnLocationChanged(Location location)
        {
            //Position als String und LatLng ausgeben
            locationText = String.Format("{0},{1}", currentLocation.Latitude, currentLocation.Longitude);
            locationPoint = new LatLng(currentLocation.Latitude, currentLocation.Longitude);

            //Camera Builder
            CameraPosition.Builder builder = CameraPosition.InvokeBuilder();
            builder.Target(locationPoint);
            builder.Zoom(18);
            cameraPosition = builder.Build();
            cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition);

            //Camera soll zur Position zoomen
            map.MoveCamera(cameraUpdate);
        }


        public void OnProviderDisabled(String provider)
        {
            //Not implemented
        }

        public void OnProviderEnabled(String provider)
        {
            //Not implemented
        }

        public void OnStatusChanged(String provider, Availability status, Bundle extras)
        {
            //Not implemented
        }



    }
}

— geändert am 02.02.2015, 15:54:55

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Sven R.
  • Forum-Beiträge: 1.904

02.02.2015, 21:08:51 via App

Irgendwelche Fehlermeldungen im LogCat? Vielleicht mal die location debuggen. Was anderes fällt mir nicht ein.

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Lukas R.
  • Forum-Beiträge: 180

03.02.2015, 11:46:46 via Website

loccat wird auch nichts angezeigt.....
Entweder ich bekomme gar keine GPS Positionen rein
Oder etwas mit dem Camera Code ist falsch

Hier ist mein überarbeitetert Code aber immernoch das selbe:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.Locations;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;



namespace HKEDV_GPS
{
    public class MapFragment : Fragment, ILocationListener
    {
        //Für Location/Map
        public Location currentLocation;
        public LocationManager locationManager;
        public GoogleMap map;

        //Strings
        public string locationProvider;
        public string locationText;
        public LatLng locationPoint;

        //Camera 
        public CameraUpdate cameraUpdate;
        public CameraPosition cameraPosition;

        //Marker
        public Marker marker1;

        // Fragment wird definiert
        public static Fragment NewInstance(int position)
        {
            Fragment fragment = new MapFragment();
            Bundle args = new Bundle();
            return fragment;
        }


        // Layout wird angegeben
        public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {

            //Besten Provider suchen
            locationManager = (LocationManager)Activity.GetSystemService(Context.LocationService);
            var locationCriteria = new Criteria();
            locationCriteria.Accuracy = Accuracy.Fine;
            locationCriteria.PowerRequirement = Power.NoRequirement;
            IList<string> acceptableLocationProviders = locationManager.GetProviders(locationCriteria, true);


            //Wenn kein Provider vorhanden = string.Empty
            if (acceptableLocationProviders.Any ()) {
                locationProvider = acceptableLocationProviders.First ();
            } else {
                locationProvider = String.Empty;
                Toast.MakeText (Activity, "Keine Provider gefunden", ToastLength.Short).Show ();
            };


            return inflater.Inflate(Resource.Layout.map, container, false);
        }


        public void StartLocationUpdates(Location location)
        {
            var locationCriteria = new Criteria();
            locationCriteria.Accuracy = Accuracy.Fine;
            locationCriteria.PowerRequirement = Power.NoRequirement;

            locationManager = Activity.GetSystemService (Context.LocationService) as LocationManager;
            locationProvider = locationManager.GetBestProvider(locationCriteria, true);
            locationManager.RequestLocationUpdates(locationProvider,  1000, 1, this);

            currentLocation = location;

            //Position als String und LatLng ausgeben
            locationText = String.Format("{0},{1}", currentLocation.Latitude, currentLocation.Longitude);
            locationPoint = new LatLng(currentLocation.Latitude, currentLocation.Longitude);

            //Camera Builder
            CameraPosition.Builder builder = CameraPosition.InvokeBuilder();
            builder.Target(locationPoint);
            builder.Zoom(18);
            cameraPosition = builder.Build();
            cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition);

            //Camera soll zur Position zoomen und Marker setzen
            MapFragment mapFrag = (MapFragment) FragmentManager.FindFragmentById(Resource.Id.map);
            GoogleMap map = mapFrag.map;
            if (map != null) {
                MarkerOptions markerOpt1 = new MarkerOptions();
                markerOpt1.SetPosition(locationPoint);
                markerOpt1.SetTitle("Meine Position");
                map.AddMarker(markerOpt1);
                map.MoveCamera(cameraUpdate);
            }

        }


        //Wenn das Layout geladen ist
        public void OnResume(Location location)
        {
            base.OnResume();

            var locationCriteria = new Criteria();
            locationCriteria.Accuracy = Accuracy.Fine;
            locationCriteria.PowerRequirement = Power.NoRequirement;

            locationManager = Activity.GetSystemService (Context.LocationService) as LocationManager;
            locationProvider = locationManager.GetBestProvider(locationCriteria, true);
            locationManager.RequestLocationUpdates(locationProvider, 1000, 1, this);

            currentLocation = location;

            //Position als String und LatLng ausgeben
            locationText = String.Format("{0},{1}", currentLocation.Latitude, currentLocation.Longitude);
            locationPoint = new LatLng(currentLocation.Latitude, currentLocation.Longitude);

            //Camera Builder
            CameraPosition.Builder builder = CameraPosition.InvokeBuilder();
            builder.Target(locationPoint);
            builder.Zoom(18);
            cameraPosition = builder.Build();
            cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition);

            //Camera soll zur Position zoomen und Marker setzen
            MapFragment mapFrag = (MapFragment) FragmentManager.FindFragmentById(Resource.Id.map);
            GoogleMap map = mapFrag.map;
            if (map != null) {
                MarkerOptions markerOpt1 = new MarkerOptions();
                markerOpt1.SetPosition(locationPoint);
                markerOpt1.SetTitle("Meine Position");
                map.AddMarker(markerOpt1);
                map.MoveCamera (cameraUpdate);
            }
        }

        //Wenn im Hintergrund
        public override void OnPause()
        {
            base.OnPause();
            locationManager.RemoveUpdates(this);
        }


        //Wird aufgerufen wennn Position verändert wurde
        public void OnLocationChanged(Location location)
        {
            //Position als String und LatLng ausgeben
            locationManager = Activity.GetSystemService (Context.LocationService) as LocationManager;
            locationText = String.Format("{0},{1}", currentLocation.Latitude, currentLocation.Longitude);
            locationPoint = new LatLng(currentLocation.Latitude, currentLocation.Longitude);

            //Camera Builder
            CameraPosition.Builder builder = CameraPosition.InvokeBuilder();
            builder.Target(locationPoint);
            builder.Zoom(18);
            cameraPosition = builder.Build();
            cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition);

            //Camera soll zur Position zoomen und Marker setzten
            MapFragment mapFrag = (MapFragment) FragmentManager.FindFragmentById(Resource.Id.map);
            GoogleMap map = mapFrag.map;
            if (map != null) {
                MarkerOptions markerOpt1 = new MarkerOptions();
                markerOpt1.SetPosition(locationPoint);
                markerOpt1.SetTitle("Meine Position");
                map.AddMarker(markerOpt1);
                map.MoveCamera (cameraUpdate);
            }
        }


        public void OnProviderDisabled(String provider)
        {
            //Not implemented
        }

        public void OnProviderEnabled(String provider)
        {
            //Not implemented
        }

        public void OnStatusChanged(String provider, Availability status, Bundle extras)
        {
            //Not implemented
        }


        //Wenn man auf einen Marker klickt
        private void MapOnMarkerClick(object sender, GoogleMap.MarkerClickEventArgs markerClickEventArgs)
        {

            //Not implemented
        }


    }
}

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten
Lukas R.
  • Forum-Beiträge: 180

03.02.2015, 12:54:48 via Website

Also ich bin der Meinung dass einfach keine GPS Positionen reinkommen

— geändert am 03.02.2015, 13:55:08

MFG Lukas R.
Programmieren ist nicht nur eine Wissenschaft, sondern auch ein Lifestyle!

Antworten