2013-01-21 3 views
3

Google Map 서비스와 관련된 프로젝트로 이전 중입니다. 내지도에서 현재 위치를 지적하고 싶습니다. 이를 위해 itemizedoverlay를 사용할 생각이 있습니다. Geopoint를 사용하여 현재 위치를 검색합니다. 하지만 코드에서 itemizedoverlay를 사용할 때 위치를 파악할 수 없으며이 메서드를 OnCreate 메서드에서 사용하고 있습니다. 이것을 OnLocationChanged 메소드로 이동하면, GeoPoint (point)는 itemizedoverlay에 의해 선택되지 않고 오류로 끝나게되고 현재 상황에서는 어플리케이션이 부서져 버립니다.현재 Loation이 안드로이드에서 선택되지 않았습니다

 MapView mapView; 
    Location location; 
    LocationManager locationmanager; 
    LocationListener locationlistener; 

     public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

     mapView = (MapView) findViewById(R.id.mapView); 
     mapView.setTraffic(true); 
     mapView.setBuiltInZoomControls(true); 

     //locationmanager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    // locationlistener = new GPSLocationListener(); 
     // locationmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER 0,0,locationlistener);                       

     GeoPoint point = new GeoPoint(
       (int) (location.getLatitude() * 1E6), 
       (int) (location.getLongitude() * 1E6)); 

      Toast.makeText(getBaseContext(), 
       "Latitude: " + location.getLatitude() + 
       " Longitude: " + location.getLongitude(), 
       Toast.LENGTH_SHORT).show(); 

     List<Overlay> mapOverlays = mapView.getOverlays(); 
     Drawable drawable = this.getResources().getDrawable(R.drawable.icon); 


      HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this); 
      OverlayItem overlayitem = new OverlayItem(point,"",""); 
      itemizedoverlay.addOverlay(overlayitem); 
      mapOverlays.add(itemizedoverlay); 

} 

/*  private class GPSLocationListener implements LocationListener 
     { 
     @Override 
     public void onLocationChanged(Location location) { 
      if (location != null) { 
      GeoPoint point = new GeoPoint(
       (int) (location.getLatitude() * 1E6), 
       (int) (location.getLongitude() * 1E6)); 

      Toast.makeText(getBaseContext(), 
       "Latitude: " + location.getLatitude() + 
       " Longitude: " + location.getLongitude(), 
       Toast.LENGTH_SHORT).show(); 

      OverlayItem overlayitem = new OverlayItem(point,"",""); 
       itemizedoverlay.addOverlay(overlayitem); 
       mapOverlays.add(itemizedoverlay); 

} 
     } */ 


    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 

Toast.makeText(getBaseContext(),"GPS Disabled",Toast.LENGTH_SHORT).show();  

    } 

    @Override 
    public void onProviderEnabled(String provider) { 

     Toast.makeText(getBaseContext(),"GPS Enabled",Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 

제게이 해결책을 제안 해 주시겠습니까 ?? 미리 감사드립니다. 미안하다면 실수를 저 지르십시오.

답변

2

당신은 com.google.android.maps.MyLocationOverlay를 사용하면 자동으로지도보기에 당신의 위치를 ​​표시 얻을 것이다. 여행 할 때 위치 정보도 업데이트됩니다.

참고 : 각각 성능 향상을 위해 onResume과 onPause에 전화 enableMyLocation 및 disableMyLocation을 보여줍니다.

@Override 
    protected void onResume() { 
     super.onResume(); 
     if (locationOverlay != null) 
      locationOverlay.enableMyLocation(); 
    } 

    @Override 
    protected void onPause() { 
     if (locationOverlay != null) 
      locationOverlay.disableMyLocation(); 
     super.onPause(); 
    } 

또한 onResume() 및 onPause() 메소드를 추가

MyLocationOverlay locationOverlay; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mapView = (MapView) findViewById(R.id.mapView); 
     mapView.setTraffic(true); 
     mapView.setBuiltInZoomControls(true); 
locationOverlay = new MyLocationOverlay(this, mapView); 
List<Overlay> mapOverlays = mapView.getOverlays(); 
mapOverlays.add(locationOverlay); 
} 

편집.

+0

지도에서 현재 위치가 표시되지 않고 있습니다. 동생이 작동합니까? – Tony

+0

GPS 위치가 실내에서 항상 사용할 수있는 것은 아닙니다. 따라서 GPS 제공 업체를위한 위치 수신기를 설치하고 실내에있는 경우 GPS 신호를 수신하지 못할 수 있습니다. MyLocationOverlay는 위치 수신기를 사용 및 설정하고 위치를 얻으려는 제공자를 찾습니다. –

+0

enableMyLocation에 대한 문서를 보면 "MyLocation을 활성화하고 LocationManager.GPS_PROVIDER 및 LocationManager.NETWORK_PROVIDER의 업데이트를 등록하려고합니다."라는 메시지가 표시됩니다. 따라서 공급자와 등록자를 모두 등록하므로 청취자 설정 및 업데이트를 위해 오버레이를 다시 업데이트 할 필요가 없습니다. –

0

나는 당신이 Google Maps Android API v2을 확인 자세한 내용은 Google Maps Android API v2

함께 가야한다고 생각.

위의 링크에서 샘플 코드의 링크를 확인하십시오. sample code

+0

친절한 답변을 보내 주셔서 감사합니다. 그러나 링크는 내가 정말로 원하는 것을 설명하지 않습니다. 그것은 단지지도를 얻는 것을 다룬다. 내지도의 현재 위치를 아이콘으로 가리키고 싶습니다. – Tony

+0

해당 링크에 샘플 코드 링크가 있습니다. 내 업데이트 된 코드를 확인하십시오. –

+1

@ Rahul 왜? 필요성은 무엇입니까? –

0

위치는 어떤 곳 그래서 나는 그것의 널 (null)를 추측 에서 onCreate()에서 당신에 의해 초기화되지 않습니다. 위도와 경도가 있다면 항목별로지도에 위치가 표시됩니다. 확인 권한은 Access_Course_location 및 매니페스트에서 ACCESS_FINE_LOCATION이 필요합니다.

+0

나는 이미 그 명단의 동생에서 정의했습니다. 또한이 제공되었습니다 : <사용 - 권한 안드로이드 : 이름 = "android.permission.ACCESS_MOCK_LOCATION은"/> 는 <사용 - 권한 안드로이드 : 이름이 "android.permission.INTERNET은"/ => – Tony

+0

당신의 토스트 쇼 위도 긴인가 ? 너는 어디로 등록 관리자가 다음 위치를 읽을 수 있습니다 –

2

이 함께 시도 -

/** 
* Setting Google Map to provided location 
*/ 
private void setMaptoLocation(Location location) { 
    mapView.setBuiltInZoomControls(true); 
    mapView.setSatellite(true); 
    int LAT = (int)(location.getLatitude() * 1E6) ; 
    int LNG = (int)(location.getLongitude() * 1E6) ; 
    GeoPoint point = new GeoPoint(LAT, LNG); 
    mapController = mapView.getController(); 
    List<Overlay> mapOverlays = mapView.getOverlays(); 
    Drawable drawable = this.getResources().getDrawable(R.drawable.icon); 
    HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this); 
    OverlayItem overlayitem = new OverlayItem(point,"",""); 
    itemizedoverlay.addOverlay(overlayitem); 
    mapOverlays.add(itemizedoverlay); 
    mapController.setZoom(ZOOM_LEVEL - ZOOM_LEVEL/2); // Set zoom level per requierment 
    mapController.animateTo(point); 

} 
+0

이것은 또한 나를 위해 동생을 위해 작동하지 않습니다. drawable에 오류가 있습니다. – Tony

+1

오 ... 당신 drawable 추가 할 것입니다 .anyways ... 나는 내 게시물을 편집했습니다 ... plz .. 지금은 ... 여전히 오류가 발생했습니다 .. plz 게시물 logcat – Jambaaz

+0

여기 또한 위치 표시 어딘가에 있습니다 그밖에.남아프리카의 기니 만에 가깝게 보인다. 나는 그것이 geopoint 문제와 관련이있을 것 같아요. 그러나 다소 효과가 있습니다. 너는 어떤 생각을 가지고 있니? – Tony

관련 문제