2

안드로이드 용 eclipse에서 loactionListener를 사용하는 데 문제가 있습니다. 나는 잠시 동안 인터넷 검색을 해왔다. 왜 이것이 작동하지 않아야하는지 모르겠다. 내가 생각할 수있는 유일한 것은 내 테스트 장치에는 시뮬레이션이 없기 때문일 수도 있습니다. (인터넷은 무선 랜을 통해 제공됩니다).android locationListener가 작동하지 않습니까?

나는 this을 참조로 사용했지만 아직 아무 것도 사용하지 않았습니다.

누구든지이 문제를 도와 줄 수 있습니까?

여기 내 활동의 관련 부분입니다 :

내가 잘 작동지도에 내 위치를 표시하기 위해 다른 방법을 사용했지만이 업데이트되지 않습니다
public class MainMenu extends Activity implements LocationListener{ 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

      setContentView(R.layout.main_menu); 
theMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.the_map)).getMap(); 
      theMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 

      locMan = (LocationManager)getSystemService(LOCATION_SERVICE); 
} 
@Override 
     public void onLocationChanged(Location location) { 
      final Double lat = location.getLatitude(); 
      final Double lng = location.getLongitude(); 
      LatLng lastLatLng = new LatLng(lat, lng); 
      String title = getString(new StringLang().textSet(userLang,"marker_title")); 
      String snippit = getString(new StringLang().textSet(userLang,"marker_snip")); 
      if(userMarker!=null) userMarker.remove(); 
      userMarker = theMap.addMarker(new MarkerOptions() 
      .position(lastLatLng) 
      .title(title) 
      .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)) 
      .snippet(snippit)); 
      reverseGeoCode(lat, lng); 
     } 
} 

. 항상 GPS를 사용한 마지막 위치에서 내 위치를 보여주었습니다.이 위치는 전국에서 60 마일 정도였습니다. 나는 이것이 작동하고있는 것을 볼 수 있지만 이것을하기위한 더 좋은 방법이있다.

오래된 방법 :

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

      setContentView(R.layout.main_menu); 
if(findViewById(R.id.the_map) != null){ 
       //map has loaded continue 
       theMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.the_map)).getMap(); 
       theMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
       locMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
       android.location.Location lastLoc = locMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
       LatLng lastLatLng ; 
       if(lastLoc == null){ 
        /* Use the LocationManager class to obtain GPS locations */ 
        double latitude = 0; 
        double longitude = 0; 
        lastLatLng = new LatLng(latitude, longitude); 
        lat = latitude; 
        lng = longitude; 
        String title = getString(new StringLang().textSet(userLang,"marker_title")); 
        String snippit = getString(new StringLang().textSet(userLang,"marker_snip")); 
        if(userMarker!=null) userMarker.remove(); 
        userMarker = theMap.addMarker(new MarkerOptions() 
        .position(lastLatLng) 
        .title(title) 
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.your_loc_icon)) 
        .snippet(snippit)); 

        CameraPosition cameraPosition = new CameraPosition.Builder() 
        .target(lastLatLng)  // Sets the center of the map to user position 
         .zoom(0)     // Sets the zoom 
         .bearing(90)    // Sets the orientation of the camera to east 
         .tilt(20)     // Sets the tilt of the camera to 30 degrees 
         .build();     // Creates a CameraPosition from the builder 
        currentLoc = lastLatLng; 
        theMap.animateCamera (CameraUpdateFactory.newCameraPosition(cameraPosition), 3000, null); 
        final TextView geoTagText = (TextView)findViewById(R.id.text_geoTag); 
        geoTagText.setText("We cannot find your current location, please check your settings."); 
       }else{ 
        double latitude = lastLoc.getLatitude(); 
        double longitude = lastLoc.getLongitude(); 
        lastLatLng = new LatLng(latitude, longitude); 
        lat = latitude; 
        lng = longitude; 
        animateMap(lastLatLng); 

       } 
      }else{ 
       theMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.the_map)).getMap(); 
       theMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE); 
       locMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
       android.location.Location lastLoc = locMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
       LatLng lastLatLng; 
       double latitude = lastLoc.getLatitude(); 
       double longitude = lastLoc.getLongitude(); 
       lastLatLng = new LatLng(latitude, longitude); 
       lat = latitude; 
       lng = longitude; 
       animateMap(lastLatLng); 
       //no map to load 
      } 
} 

    @Override 
public void onLocationChanged(Location location) { 
    final Double lat = location.getLatitude(); 
    final Double lng = location.getLongitude(); 
    LatLng lastLatLng = new LatLng(lat, lng); 
    String title = getString(new StringLang().textSet(userLang,"marker_title")); 
    String snippit = getString(new StringLang().textSet(userLang,"marker_snip")); 
    if(userMarker!=null) userMarker.remove(); 
    userMarker = theMap.addMarker(new MarkerOptions() 
    .position(lastLatLng) 
    .title(title) 
    .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)) 
    .snippet(snippit));  
} 

또한 그들이 원하는 경우 수동으로 사용자의 위치를 ​​변경하는 버튼이 있음을 추가하는 것이 유용 할 것이다.

reLocBtn.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View arg0) { 
       if(menuActive == true){ 
        playSound(); 
        LocationManager loc = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
        android.location.Location gpsLoc = (Location) loc.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
        double lat = gpsLoc.getLatitude(); 
        double lng = gpsLoc.getLongitude(); 
        LatLng lastLatLng = new LatLng(lat, lng); 
        animateMap(lastLatLng); 
       } 
      } 
     }); 

두 방법 모두 업데이트되지 않는 이유는 모르겠지만 두 번째 방법은 첫 번째로드에서 더 잘 작동하도록합니다.

+0

올해 초 Google에서 소개 한 새로운 위치 API로 이동해야합니다. https://developer.android.com/training/location/index.html –

+0

해당 링크는 매우 유용하지만 사용자 기기에서 Google Play 서비스를 확인해야합니다. 내 활동이 많이 진행되는 가운데 길어서 정말 추가하지 않으려 고하지 않아도됩니다. –

답변

4

어디서나 requestLocationUpdates()을 사용하는 것 같지 않습니다. 이 메서드에서는 위치 업데이트를 호출하는 LocationListener 개체를 전달합니다. Google지도 API v2를 사용하는 경우

locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); 
+0

어디서이 코드를 삽입 할 것인가?이 코드는 onCreate 메서드 내부에 있다고 가정합니다. –

+0

'locMan = (LocationManager) getSystemService (LOCATION_SERVICE);의 바로 아래에 넣으십시오. –

+0

그래, 나는 대서양 중심의지도를로드했습니다. (변화 없음), 마커 없음. 전화가 활성화 되었기 때문입니다. 이 데이터를 올바르게 테스트하려면 등록 된 SIM 카드가 필요합니까? –

1

, 당신은 예를 들어 것을 사용하여 수행 할 수 있습니다 : 귀하의 경우

즉, 다음

private GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() { 
    @Override 
    public void onMyLocationChange(Location location) { 
     LatLng loc = new LatLng(location.getLatitude(), location.getLongitude()); 
     mMarker = mMap.addMarker(new MarkerOptions().position(loc)); 
     if(mMap != null){ 
      mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f)); 
     } 
    } 
}; 

및지도에 대한 리스너를 설정 :

mMap.setOnMyLocationChangeListener(myLocationChangeListener); 

지도가 처음으로 위치를 찾으면 호출됩니다.

LocationService 또는 LocationManager가 필요하지 않습니다.

관련 문제