본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] GPS 관련 APIs with simple example.

by 돼지왕 왕돼지 2012. 2. 18.
반응형


안녕하세요. 돼지왕 왕돼지입니다.
오늘은 GPS ( 위치제공자 ) 관련 APIs 와 간단한 샘플 코드를 함께 보도록 해요.
이 글은 http://www.winapi.co.kr/android/ 를 참조하여 정리하여 작성한 글입니다.


<Permission>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />



<LocationManager 얻어오기.>

LocationManager Context.getSystemService(Context.LOCATION_SERVICE); 


<LocationManager APIs> 

public List getAllProviders ()
public List getProviders ([Criteria criteria], boolean enabledOnly)
public String getBestProvider (Criteria criteria, boolean enabledOnly)
boolean isProviderEnabled( String provider )

public void setAltitudeRequired (boolean altitudeRequired)
public void setBearingRequired (boolean bearingRequired)
public void setSpeedRequired (boolean speedRequired)
public void setCostAllowed (boolean costAllowed)
public void setPowerRequirement (int level)
public void setAccuracy (int accuracy)

void requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener, [ Looper looper])
void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent)
 
void removeUpdates (LocationListener listener)
void removeUpdates (PendingIntent intent)
 
 
void onProviderEnabled (String provider)
void onProviderDisabled (String provider)
 
void onStatusChanged (String provider, int status, Bundle extras)
void onLocationChanged (Location location)  

double getLatitude ()
double getLongitude ()
double getAltitude () 

Location LocationManager.getLastKnownLocation (String provider)  

static String convert (double coordinate, int outputType)
static double convert (String coordinate) 

void addProximityAlert (double latitude, double longitude, float radius, long expiration, PendingIntent intent)
// expiration = -1 : 무한정 대기 ( sleep 모드일 때는 4분에 한번씩 체크)
// PendingIntent 는 영역에 들어오거나 영역에서 빠져나갈 때 실행되는 intent
// 이 intent로 KEY_PROXIMITY_ENTERING 이라는 값이 전달된다.  
 
void removeProximityAlert (PendingIntent intent) 
 
 
<Accuracy Value> 
 값 설명 
 NO_REQUIREMENT 상관없음 
 ACCURACY_COARSE 대충의 정밀도 
 ACCURACY_FINE 정밀한 정밀도 
 POWER_HIGH 배터리 많이 사용해도 무관 
 POWER_LOW 배터리 조금만 사용해야 한다. 
 POWER_MEDIUM 배터리를 적당히 사용해야 한다. 


 
<기본 위치제공자 Constants>
public static final String GPS_PROVIDER = "gps";
public static final String NETWORK_PROVIDER = "network";
public static final String PASSIVE_PROVIDER = "passive";
 
 
 

 <State Constants>
 상태 설명 
 OUT_OF_SERVICE 서비스를 사용할 수 없는 상태 
 TEMPORARILY_UNAVAILABLE 일시적으로 사용 중지된 상태이며 곧 복구될 예정이다. 
 AVAILABLE 사용 가능한 상태이다. 


  
<Convert 시 OutputType> 
 포맷  설명 
 FORMAT_DEGREES  도단위로좌표를지정하며더세밀한좌표는도아래의십진소수점으로표현한다. +/- 부호가앞에붙고DDD.DDDDD 실수값하나가온다. 부호가생략되면+로가정하며이는북위, 동경에해당한다.
 FORMAT_MINUTES  분단위로좌표를지정하며더세밀한좌표는분아래의소수점으로표현한다. [+/-]DDD.MM.MMMMM 형식을가진다.
 FORMAT_SECONDS  초단위로좌표를지정하며초아래에더세밀한소수점을지정할수있다. [+/-]DDD:MM:SS.SSSSS 형식을가진다.
 
  ex)  Location.convert(latitude, Location.FORMAT_SECONDS);
 
 
 
<example> 

     LocationManager mLocMan;
     PendingIntent mPending;
     public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.location_locationalert);
 
          mLocMan = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
          Intent intent = new Intent(this, FishingReceiver.class);
          mPending = PendingIntent.getBroadcast(this, 0, intent, 0);
     }
 
     public void onResume() {
          super.onResume();
          mLocMan.addProximityAlert(37.94, 127.81, 500, -1, mPending);
     }  
 
     public void onPause() {
          super.onPause();
          mLocMan.removeProximityAlert(mPending);
     }
 
public classFishingReceiver extends BroadcastReceiver{
     public void onReceive(Context context, Intent intent) {
         boolean bEnter = intent.getBooleanExtraLocationManager.KEY_PROXIMITY_ENTERING, true );
          Toast.makeText(context, bEnter ? "낚시하기 좋은 곳입니다.":"다른 곳으로 이동하세요.",
                   Toast.LENGTH_LONG).show();
     }
}  
 

  
로그인 없이 추천 가능합니다. 손가락 꾸욱~

반응형

댓글