제임스딘딘의
Tech & Life

개발자의 기록 노트/Android

[안드로이드] 안드로이드 API GPS 상태체크

제임스-딘딘 2011. 12. 4. 18:39

안드로이드 API GPS 상태체크


지도를 비롯하여, 안드로이드 기기의 위치정보를 이용한 서비스 개발을 할 때, 일반적으로 기기의 현재 위도(latitude), 경도(longitude) 값이 필요하다.

기기의 현재 위,경도 값을 알기 위해서는, 사용자가 위치정보 사용을 동의해야 한다.
만약 동의하지 않은 상태에서 위치 획득 관련 API호출한다면,  exception을 던지게 되어있다.

만약 아래와 같은 UX flow를 구현하려 한다면, 아래 코드를 참고하자.

GPS 사용동의 여부를 체크 후  
    if 미동의 : 'GPS 사용 동의 설정 화면으로 이동 하겠는가?' 다이얼로그 출력. 
         if 다이얼로그로 부터 '이동한다' 입력받을 경우 : GPS 설정 화면으로 이동.

 아래는 그 기능의 예제코드이다.


@Override
 public void onCreate(Bundle savedInstanceState) {
	 ...
	 String context = Context.LOCATION_SERVICE;
	 locationManager = (LocationManager)getSystemService(context);
	 if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
		alertCheckGPS();
  }
	 ...
 }

private void alertCheckGPS() {
	 AlertDialog.Builder builder = new AlertDialog.Builder(this);
	 builder.setMessage("Your GPS is disabled! Would you like to enable it?")
			 .setCancelable(false)
			 .setPositiveButton("Enable GPS",
					 new DialogInterface.OnClickListener() {
						 public void onClick(DialogInterface dialog, int id) {
							 moveConfigGPS();
						 }
				 })
			 .setNegativeButton("Do nothing",
					 new DialogInterface.OnClickListener() {
						 public void onClick(DialogInterface dialog, int id) {
							 dialog.cancel();
						 }
				 });
	 AlertDialog alert = builder.create();
	 alert.show();
 }

// GPS 설정화면으로 이동
private void moveConfigGPS() {
	Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
	startActivity(gpsOptionsIntent);
}