1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Eigenen Standort mit GoogleMaps anzeigen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von zblack, 18.11.2011.

  1. zblack, 18.11.2011 #1
    zblack

    zblack Threadstarter Gast

    Eine kleine Änderung.

    Hallo Users,
    seit Tagen kämpfe ich damit , dass mein eigener Standort auf der GoogleMap Karte nicht angezeigt wird (z.b als ein Pfeil, ein farbiges Punkt, wie auch immer).
    Dafür habe ich ne Klasse erstellt :
    Code:
    
    public class HelloGoogleMaps extends MapActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            MapView mapView = (MapView) findViewById(R.id.mapView);
            mapView.setBuiltInZoomControls(true);
          
            final List<Overlay> mapOverlays = mapView.getOverlays();
            Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher);
            final ITO itemizedoverlay = new ITO(drawable);
    
            final MapController controller = mapView.getController();
            
            LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
            
            LocationListener listener = new LocationListener() {
                
                
                @Override
                public void onLocationChanged(Location location) {
                    // TODO Auto-generated method stub
                     
                     GeoPoint point = new GeoPoint((int) location.getLatitude() * (int)1E6, (int) location.getLongitude()* (int)1E6);
                     controller.setCenter(point);
                     OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
                     itemizedoverlay.addOverlay(overlayitem);
                     mapOverlays.add(itemizedoverlay);
                        
                }
            };
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 10, listener);
        }
    }
    
    Die dazugehörige ItemizedOverlay Klasse ist hier:

    Code:
    public class ITO extends ItemizedOverlay {
    
        private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
        Context mContext;
        public ITO(Drawable defaultMarker) {
            super(boundCenter(defaultMarker));
            // TODO Auto-generated constructor stub
        }
        
        public ITO(Drawable defaultMarker, Context context) {
              super(defaultMarker);
              mContext = context;
            }
        /* (non-Javadoc)
         * @see com.google.android.maps.ItemizedOverlay#createItem(int)
         */
        @Override
        protected OverlayItem createItem(int arg0) {
            // TODO Auto-generated method stub
            return mOverlays.get(arg0);
        }
    
        public void addOverlay(OverlayItem overlay) {
            mOverlays.add(overlay);
            populate();
        }
        
        /* (non-Javadoc)
         * @see com.google.android.maps.ItemizedOverlay#size()
         */
        @Override
        public int size() {
            // TODO Auto-generated method stub
            return mOverlays.size();
        }
        
        @Override
        protected boolean onTap(int index) {
          OverlayItem item = mOverlays.get(index);
          AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
          dialog.setTitle(item.getTitle());
          dialog.setMessage(item.getSnippet());
          dialog.show();
          return true;
        }
    
    }
    
    
    Die MapKey von Google ist in der xml datei drin.
    Die Sachen :
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-library android:name="com.google.android.maps"/>
    sind auch in der AndroidManifest drin.

    Bei der Ausführung am Handy, geht GPS an. Die Position wird gezeigt, nur die Stadt wo ich bin ist leider die falsche. Beim klicken auf das Icon wo ich mich befinde , stürzt die App ab. die Logcat ausgaben sind folgende:
    Code:
    11-20 21:09:09.934: I/MapActivity(23074): Handling network change notification:CONNECTED
    11-20 21:09:09.944: E/MapActivity(23074): Couldn't get connection factory client
    11-20 21:09:09.944: I/ActivityThread(23074): queueIdle
    11-20 21:09:09.944: V/ActivityThread(23074): Reporting idle of ActivityRecord{4a4054d0 token=android.os.BinderProxy@4a405038 {t.m/t.m.HelloGoogleMaps}} finished=false
    11-20 21:09:09.944: W/ActivityNative(23074): send ACTIVITY_IDLE_TRANSACTION
    11-20 21:09:13.074: W/dalvikvm(23074): threadid=1: thread exiting with uncaught exception (group=0x400207d8)
    11-20 21:09:13.084: E/AndroidRuntime(23074): FATAL EXCEPTION: main
    11-20 21:09:13.084: E/AndroidRuntime(23074): java.lang.NullPointerException
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.android.internal.app.AlertController$AlertParams.<init>(AlertController.java:743)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.app.AlertDialog$Builder.<init>(AlertDialog.java:273)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at t.m.ITO.onTap(ITO.java:58)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:347)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.google.android.maps.GestureDetector.onTouchEvent(GestureDetector.java:533)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.google.android.maps.MapView.onTouchEvent(MapView.java:647)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.view.View.dispatchTouchEvent(View.java:3766)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1731)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1120)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1715)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1787)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.os.Handler.dispatchMessage(Handler.java:99)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.os.Looper.loop(Looper.java:123)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at android.app.ActivityThread.main(ActivityThread.java:4633)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at java.lang.reflect.Method.invokeNative(Native Method)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at java.lang.reflect.Method.invoke(Method.java:521)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
    11-20 21:09:13.084: E/AndroidRuntime(23074):     at dalvik.system.NativeStart.main(Native Method)
    
    
    MfG.
     
    Zuletzt von einem Moderator bearbeitet: 20.11.2011
  2. zblack, 21.11.2011 #2
    zblack

    zblack Threadstarter Gast

    keine ideen ?
    hmm. schade
     
  3. Neeldarax, 21.11.2011 #3
    Neeldarax

    Neeldarax Erfahrener Benutzer

    Beiträge:
    170
    Erhaltene Danke:
    31
    Registriert seit:
    07.12.2010
    Hallo zblack,

    nicht das wir keine Idee hätten, aber im Logcat steht doch alles was du brauchst.
    Wo hast du Probleme das zu beheben? Was verstehst du hier nicht?

    regards
     
  4. zblack, 21.11.2011 #4
    zblack

    zblack Threadstarter Gast

    ok. NullPointer wurde beseitigt, aber warum zeigt er mir mein Standort ungenau an ?
    Ich befinde mich laut der Karte im Nachbarhaus. :D
     
  5. kleinerkathe, 21.11.2011 #5
    kleinerkathe

    kleinerkathe Android-Lexikon

    Beiträge:
    1,365
    Erhaltene Danke:
    219
    Registriert seit:
    23.01.2010
    Wie weit ist das Nachbarhaus weg? GPS ist jetzt auch nicht soooo genau ;)
     
  6. zblack, 21.11.2011 #6
    zblack

    zblack Threadstarter Gast

    ja so ca 50 meter vlt weniger bin ich von meinem tatsächlichem Standort entfernt
     
    Zuletzt von einem Moderator bearbeitet: 21.11.2011
  7. Neeldarax, 22.11.2011 #7
    Neeldarax

    Neeldarax Erfahrener Benutzer

    Beiträge:
    170
    Erhaltene Danke:
    31
    Registriert seit:
    07.12.2010
    GPS-Genauigkeit kann sich bis zu 10m verbessern, muss halt alle ungenauen Signale ausfiltern.

    Location | Android Developers

    regards
     

Diese Seite empfehlen