2014-12-29 2 views
0

내가 도착하거나 특정 장소를 떠나야하는지 알 수있는 GPS로 애플리케이션을 개발하려고합니다. I.E. 만약 내가 집에 있다면, 응용 프로그램은 그것을 알고 있으며, 집에서 나가면 응용 프로그램도 그것을 알고 있습니다. 또는 내 집의 반경을 설정하고 싶다면. 하지만 문제는 내가 appliction을 실행하고 매 x 시간마다 배터리를 죽일 수있는 장소를 검색하려고 할 때라고 생각합니다.GPS에서 장소를 식별하는 가장 좋은 방법은 무엇입니까?

그 작업에 가장 적합한 솔루션은 무엇입니까? 서비스를 사용해야합니까? 내 영어에 대한

public class LocationMap extends Service implements LocationListener { 
    public static final String LOG = "locationLogger"; 

    Context context; 
    LocationManager manager; 
    Location location; 
    public static final int REFRESH = 1000*1; 
    public static final int DISTANCE = 1*1; 
    double lat,lng; 
    boolean isGps,isWiFi; 



    public LocationMap(Context context) { 
     this.context = context; 
     getLocation(); 

    } 

    private Location getLocation(){ 
     try { 

      manager = (LocationManager) context.getSystemService(LOCATION_SERVICE); 
      manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,REFRESH,DISTANCE,this); 

      //Check who is on WiFi or GPS 
      isWiFi = manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);Log.d(LOG, "Wifi?="+isWiFi); 
      isGps = manager.isProviderEnabled(LocationManager.GPS_PROVIDER);Log.d(LOG, "Gps?="+isGps); 

      Log.d(LOG, "manager is not null?="+manager); 
      if (manager != null) { 
       if(isGps){ 
        Log.d(LOG, "get last location from Gps"); 
        location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
       }else 
       if(isWiFi){ 
        Log.d(LOG, "get last location from WiFi"); 
        location = manager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
       } 

       if (location != null) { 

        lat = location.getLatitude(); 
        lng = location.getLongitude(); 
        Log.d(LOG, "lat="+lat +" lng="+lng); 
       } 
      } 

     } catch (Exception e) { 

     } 
     return location; 
    } 


    public String getPlace(){ 
     String placeName = "No place found, check your gps setting"; 
     try { 
      Geocoder geocoder = new Geocoder(context); 
      List<Address> address =geocoder.getFromLocation(getLat(), getLng(), 1); 
       String country = address.get(0).getCountryName(); 
       String city = address.get(0).getLocality(); 
       String street = address.get(0).getAddressLine(0); 
       placeName = country+", "+city+", "+street; 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return placeName; 
    } 

    public double getLng(){ 
     return lng; 
    } 


    public double getLat() { 
     return lat; 
    } 





    @Override 
    public void onLocationChanged(Location location) { 


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

    } 
    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 


} 

미안 : 여기 내가있는 곳과 좌표를 얻기 위해 만든 클래스입니다. 당신이 나를 이해하길 바랍니다 :)

+0

:

내부 원이 계산됩니다. –

+0

어디서 최고의 튜토리얼을 찾을 수 있습니까? 그것에 대해 검색하고 정확히 내가 필요한 것 같습니다! 감사합니다 –

+0

어떤 자습서가 가장 주관적입니다. 오직 당신 만이 당신에게 말하는 것을 결정할 수 있습니다. –

답변

0

그것은 귀하의 정확성에 따라 다릅니다. 원하는 범위가 약 1-3km 인 경우 배터리 절약 솔루션이 있습니다. 여기서는 더 이상 설명하지 않겠습니다. (장치를 사용하여 네트워크 위치 g procider) 정확성을 훨씬 더 정확하게 주위에 GPS를 사용하는 방법이 없습니다 내 아이폰 4 8 시간 정도 지속됩니다.

도착이 lat, lon, radius로 정의 된 원 안에 들어가면 감지됩니다. 검색 가능한 키워드는 "지오 펜스"입니다

boolean isInside = currentLocation.distanceTo(circleCenterLongitude, circleCenterLatitude) < radiusMeters. 
관련 문제