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)) {
//위치정보 다이얼로그를 띄운다.
}