안규 공부방

Android > 위치정보 - 위치 설정 액티비티로 이동시켜주기

등록일 : 2017-07-06 17:56 조회수 : 93,739

이번 포스트에서는 위치 설정 액티비티로 이동시켜주는 방법에 대해서 알아보도록 하겠습니다.

1. 먼저 위치 정보를 구하기 위한 권한을 설정합니다.
		<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >    </uses-permission>
		<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >    </uses-permission>
		<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >    </uses-permission>



2. LocationListener 인터페이스 onProviderDisabled 함수에서 처리되는 방법을 확인 체크해 보시기 바랍니다.


MainActivity.class
		import java.io.IOException;
		import java.util.List;
		import java.util.Locale;

		import android.app.Activity;
		import android.app.AlertDialog;
		import android.app.Dialog;
		import android.content.Context;
		import android.content.DialogInterface;
		import android.content.Intent;
		import android.location.Address;
		import android.location.Geocoder;
		import android.location.Location;
		import android.location.LocationListener;
		import android.location.LocationManager;
		import android.os.Bundle;
		import android.util.Log;
		import android.widget.Toast;


		public class MainActivity extends Activity {

			Geocoder geoCoder;
			LocationManager manager;

			@Override
			public void onCreate(Bundle savedInstanceState) {
				super.onCreate(savedInstanceState);
				setContentView(R.layout.activity_main);

				// 주소를 확인하기 위한 Geocoder KOREA 와 KOREAN 둘다 가능
				geoCoder = new Geocoder(this, Locale.KOREAN);

				// startLocationService
				startLocationService();
			}


			private void startLocationService() {

				// get manager instance
				manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

				// set listener
				GPSListener gpsListener = new GPSListener();
				long minTime = 10000;
				float minDistance = 0;

				manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,minTime, minDistance, gpsListener);
				manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000, 1, gpsListener);

				//Toast.makeText(getApplicationContext(),
				//		"Location Service started.\nyou can test using DDMS.", 2000)
				//		.show();
			}

			private class GPSListener implements LocationListener {

				@Override
				public void onLocationChanged(Location location) {
					// capture location data sent by current provider
					Toast.makeText(MainActivity.this, "onLocationChanged", Toast.LENGTH_SHORT).show();
					
					Double latitude = location.getLatitude();
					Double longitude = location.getLongitude();

					String msg = "Latitude : " + latitude + "\nLongitude:" + longitude;
					Log.i("GPSLocationService", msg);
					Toast.makeText(getApplicationContext(), msg, 2000).show();

					StringBuffer juso = new StringBuffer();

					try {
						// 위도,경도를 이용하여 현재 위치의 주소를 가져온다.
						List<Address> addresses;
						addresses = geoCoder.getFromLocation(latitude, longitude, 1);
						for (Address addr : addresses) {
							int index = addr.getMaxAddressLineIndex();
							for (int i = 0; i <= index; i++) {
								juso.append(addr.getAddressLine(i));
								juso.append(" ");
							}
							juso.append("\n");
						}
					} catch (IOException e) {
						e.printStackTrace();
					}

					Toast.makeText(getApplicationContext(), String.valueOf(juso), 2000)
							.show();
					
					manager.removeUpdates(this);
				}
				
				@Override
				public void onProviderDisabled(String provider) {
					Toast.makeText(MainActivity.this, "onProviderDisabled", Toast.LENGTH_SHORT).show();

					new AlertDialog.Builder(MainActivity.this)
					.setTitle("경고")
					.setMessage("GPS가 꺼져있습니다.\n ‘위치 서비스’에서 ‘Google 위치 서비스’를 체크해주세요")			
					.setCancelable(false)	// Back Button 동작 안하도록 설정

					// "계속" 버튼
					.setPositiveButton("설정",new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
							startActivity(intent);
							  
							Toast.makeText(MainActivity.this, "계속 하세요~", Toast.LENGTH_SHORT).show();					
							
						}
					})			

					// "종료" 버튼
					.setNegativeButton("종료", new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int which) {
							Toast.makeText(MainActivity.this, "종료 버튼 눌렀네요", Toast.LENGTH_SHORT).show();						
						}
					})

					.show();
				}

				
				@Override
				public void onProviderEnabled(String provider) {
					Toast.makeText(MainActivity.this, "onProviderEnabled", Toast.LENGTH_SHORT).show();
				}
				
				@Override
				public void onStatusChanged(String provider, int status, Bundle extras) {
					Toast.makeText(MainActivity.this, "onStatusChanged", Toast.LENGTH_SHORT).show();
				}

			}

		}


3. 위치정보상태가 켜져 있는지를 확인하는 방법은 아래와 같습니다.
		if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
			//위치정보 다이얼로그를 띄운다.
		}
		


 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.