728x90
안드로이드에서 제공하는 LocationManager라는 시스템서비스를 이용
1. Manifest에 권한등록
Location 퍼미션
위치 정보를 얻으려면 다음 퍼미션 중 하나는 AndroidManifest에 정의해야 합니다.
- ACCESS_COARSE_LOCATION : 도시 Block 단위의 정밀도의 위치 정보를 얻을 수 있습니다.
- ACCESS_FINE_LOCATION : ACCESS_COARSE_LOCATION보다 더 정밀한 위치 정보를 얻을 수 있습니다.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
2. 위치관리자 객체 생성
final LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
3. 마지막으로 확인된 위치 정보 얻기
Location은 다음과 같은 정보들을 제공합니다.
- getAccuracy() : 정확도
- getLatitude() : 위도
- getLongitude() : 경도
- getTime() : 생성된 시간(UTC)
- getElapsedRealtimeNanos() : 생성된 시간(Elapsed time)
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
4. 위치리스너 구현
final LocationListener gpsLocationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// 위치 리스너는 위치정보를 전달할 때 호출되므로 onLocationChanged()메소드 안에 위지청보를 처리를 작업을 구현 해야합니다.
String provider = location.getProvider(); // 위치정보
double longitude = location.getLongitude(); // 위도
double latitude = location.getLatitude(); // 경도
double altitude = location.getAltitude(); // 고도
txtResult.setText("위치정보 : " + provider + "\n" + "위도 : " + longitude + "\n" + "경도 : " + latitude + "\n" + "고도 : " + altitude);
} public void onStatusChanged(String provider, int status, Bundle extras) {
} public void onProviderEnabled(String provider) {
} public void onProviderDisabled(String provider) {
}
};
5. 위치정보 업데이트
// 위치정보를 원하는 시간, 거리마다 갱신해준다.
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
1000,
1,
gpsLocationListener);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
1000,
1,
gpsLocationListener);
<전체코드>
public class MainActivity extends AppCompatActivity {
private Button button1;
private TextView txtResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button)findViewById(R.id.button1);
txtResult = (TextView)findViewById(R.id.txtResult);
// 위치 관리자 객체 참조하기
final LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if ( Build.VERSION.SDK_INT >= 23 &&
ContextCompat.checkSelfPermission( getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) {
ActivityCompat.requestPermissions( MainActivity.this, new String[] {
android.Manifest.permission.ACCESS_FINE_LOCATION}, 0 );
}
else{
// 가장최근 위치정보 가져오기
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(location != null) {
String provider = location.getProvider();
double longitude = location.getLongitude();
double latitude = location.getLatitude();
double altitude = location.getAltitude();
txtResult.setText("위치정보 : " + provider + "\n" +
"위도 : " + longitude + "\n" +
"경도 : " + latitude + "\n" +
"고도 : " + altitude);
}
// 위치정보를 원하는 시간, 거리마다 갱신해준다.
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,
1000,
1,
gpsLocationListener);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,
1000,
1,
gpsLocationListener);
}
}
});
}
final LocationListener gpsLocationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// 위치 리스너는 위치정보를 전달할 때 호출되므로 onLocationChanged()메소드 안에 위지청보를 처리를 작업을 구현 해야합니다.
String provider = location.getProvider(); // 위치정보
double longitude = location.getLongitude(); // 위도
double latitude = location.getLatitude(); // 경도
double altitude = location.getAltitude(); // 고도
txtResult.setText("위치정보 : " + provider + "\n" + "위도 : " + longitude + "\n" + "경도 : " + latitude + "\n" + "고도 : " + altitude);
} public void onStatusChanged(String provider, int status, Bundle extras) {
} public void onProviderEnabled(String provider) {
} public void onProviderDisabled(String provider) {
}
};
}
결과
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] Textview의 텍스트 생략 기호(...) 사용 또는 텍스트 흐름 효과주기 (0) | 2022.01.19 |
---|---|
[Java][Android] Fragment에서 registerForActivityResult() 사용해 액티비티 결과 받기 (0) | 2022.01.15 |
[JAVA][Android] Youtube API 사용법 (0) | 2022.01.07 |
[JAVA][Android] 녹음 기능 만들기 (0) | 2021.12.31 |
[JAVA][Android] 비밀번호 hash 암호화하기 (0) | 2021.12.30 |