티스토리 뷰
안드로이드 기반의 스마트폰 위치는 LocationManager라는 시스템 서비스가 관리한다. 실제로 android.location 패키지에는 이 클래스를 포함아여 위치 정보를 확인하거나 확인된 위치 정보를 사용하는 데 필요한 클래스들이 정의되어 있다.
현재 단말의 위치를 확인하는 가장 기본적인 방법은 LocationManager에게 위치 정보를 요청하는 것으로 다음 단계를 거친다.
- LocationManager 객체 참조: getSystemService() 메서드를 이용하여 호출
- 위치 리스너 구현: LocationManager는 현재 위치를 LocationListener를 통해 받게 되므로 새로운 리스너를 구현하여 전달 받은 위치 정보를 처리한다.
- 위치 정보 업데이트 요청: LocationManager에게 위치 정보가 변경될 때마다 알려달라고 요청하기 위해 requestLocationUpdates() 메서드를 호출한다.이 메서드의 호출 인자는 LocationListener이다.
바로 한번 확인해보자.
◎MainActivity.java
package com.example.samplegps;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.core.app.ActivityCompat;
import com.yanzhenjie.permission.Action;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.runtime.Permission;
import java.util.List;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startLocationService();
}
});
AndPermission.with(this)
.runtime()
.permission(Permission.ACCESS_FINE_LOCATION,
Permission.ACCESS_COARSE_LOCATION)
.onGranted(new Action<List<String>>() {
@Override
public void onAction(List<String> permissions) {
}
})
.onDenied(new Action<List<String>>() {
@Override
public void onAction(List<String> permissions) {
}
})
.start();
}
public void startLocationService() {
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
try {
if (ActivityCompat.checkSelfPermission(this,
android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
// 이전에 확인했던 위치 정보 가져오기
// 위치 제공자를 인자로 전달하며, 안드로이드의 위치 제공자는 크게 GPS_PROVIDER 와 NETWORK_PROVIDER 가 있다.
Location location = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if(location != null) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
String message = "최근 위치 => Latitude + " + latitude + "\nLongitude: " + longitude;
textView.setText(message);
}
GPSListener gpsListener = new GPSListener();
long minTime = 10000;
float minDistance = 0;
// 일정 시간 간격으로 위치를 확인하거나, 일정 위치 간격을 이동했을 때 위치 정보를 제공하는 기능
manager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
minTime, minDistance, gpsListener
);
Toast.makeText(getApplicationContext(), "내 위치확인 요청함",
Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.getStackTrace();
}
}
class GPSListener implements LocationListener {
@Override
// 위치가 확인되었을 때 콜백되는 메서드
public void onLocationChanged(@NonNull Location location) {
Double latitude = location.getLatitude();
Double longitude = location.getLongitude();
String message = "내 위치 -> Latitude : "+ latitude + "\nLongitude:"+ longitude;
textView.setText(message);
}
@Override
public void onProviderEnabled(@NonNull String provider) {
LocationListener.super.onProviderEnabled(provider);
}
@Override
public void onProviderDisabled(@NonNull String provider) {
LocationListener.super.onProviderDisabled(provider);
}
}
}
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] 알림 1: 소리와 진동 (0) | 2022.04.26 |
---|---|
[Android] 위치 2: 현재 위치의 지도 표시하기 (0) | 2022.04.22 |
[Android] Multi Media 7: Camera2 API 를 사용한 동영상 저장 (0) | 2022.04.22 |
[Android] Multi Media 6: 오디오 녹음하기 (0) | 2022.04.21 |
[Android] Multi Media 5: Camera2 API (0) | 2022.04.20 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- javascript
- 인천 구월동 맛집
- AsyncStorage
- 파니노구스토
- redux
- Promise
- 인천 구월동 이탈리안 맛집
- await
- 맛집
- redux-thunk
- react-native
- 정보보안기사 #실기 #정리
- Async
- 이탈리안 레스토랑
- react
- Total
- Today
- Yesterday