2013-02-26 3 views
2

조각 내에서 LocationListener 및 LocationManager을 사용하여 사용자 위치를 얻을 수 있습니까? 아니면 기본 활동 내에서 LocationListener을 사용해야하고 데이터를 조각으로 다시 전송하기 위해 인터페이스 (또는 다른 방법)를 사용해야합니까? 변경 앱 UI로 인해 활동을 조각으로 변환하는 중입니다. 독립 실행 형 액티비티를 사용할 때 위치를 얻는 것은 문제가되지 않았지만 이제 액티비티를 조각으로 만들었습니다.조각 내에서 LocationListener 사용

다음은 LocationListener를 추가하는 방법입니다. LocationListener locationListener로 선언되었습니다.

private void addLocationListener(){ 
    locationListener = new LocationListener(){ 

     @Override 
     public void onLocationChanged(Location location) { 
      GeoPoint userLoc = processNewLocation(location); 
      if(userLoc != null){ 
       Log.d("USERLOC", userLoc.toString()); 
            //do something with the location  
      } 
     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE); 
      if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
      } else { 
       locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
      } 
     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE); 
      if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
       locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
      } else { 
       locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
      } 
     } 

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

     } 

    }; 
} 

참고 : processNewLocation은 위치를 GeoPoint로 변환합니다. 위치를 찾지 못해서 멀지도 않습니다.

여기 위에서 게시 된 코드에서 위치 관리자

public void addLocationManager(){ 
locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 
} 

private void getLocationFromNetwork(){ 
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, locationListener); 
Log.d("GET NETWORK", "Listener registered"); 
} 

private void getLocationFromGPS(){ 
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LOCATION_REFRESH_TIME, LOCATION_REFRESH_DISTANCE, locationListener); 
Log.d("GET GPS", "Listener registered"); 
} 

private Location getLastLocation(){ 
Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
return lastKnownLocation; 
} 
+0

조각 내에서 LocationManager 및 LocationListener를 사용할 수 있습니다. 위치를 지정하지 않는 이유를 알아 내기 위해 더 많은 코드가 필요합니다. – paul

+0

은 locationListener에 대한 코드를 게시하여 시작하십시오. – paul

답변

0

에 리스너를 등록 코드, 당신은 이제까지을 locationManager와 LocationListener를 등록하지 않습니다. 당신은 어딘가에 조각 생성 코드에 onProviderEnabled 코드에서이 같은 코드가 필요합니다 :

 locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE); 
     if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
      locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
     } else { 
      locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
     } 

obProviderEnabled 콜백을 사용하면 위치 관리자에 등록 할 때까지 발생하지 않습니다.

+0

이전에 등록 된 locationListener를 보여주는 코드가있었습니다. 분명히 더 많은 코드를 추가 할 때 제거되었습니다. – paul

+0

죄송합니다. 다시 게시 할 수 있습니다 - 코멘트는 위치 수신기 코드 만 묻습니다. – Rarw

관련 문제