1.1 위치기반서비스
- 모바일 네트워크를 통해 휴대 단말에서 접근할 수 있는 위치 정보 활용 시스템 입니다.
- LBS는 스마트폰 단말에서 자신의 위치를 찾을 수 있게 되면서 활성화 되었다.
1.2 위치기반서비스 활용 분야
- 엔터테인먼트, 위급상황, 의료, 산업, 개인 생활 등등
1.3 대표적인 사용 예
- 가장 가까운 은행, 식당, 주유소, 호텔, 골프장, 병원, 경찰서 찾기
- 출발지부터 목적지까지 가는 길 찾기
- 친구나 가족들의 위치 또는 행사 장소등을 알려주는 소셜 네트워킹 서비스, 친구찾기
1.4 위치를 찾는 대표적인 방법 두가지
- GPS 위성을 이용한 위치 찾기
- 기지국의 타워 ID를 이용한 위치 찾기
1.5 기지국을 이용한 위치 찾기 (cell Tower Triangulation)
- 가까이 위치하고 있는 기지국과의 상대적인 거리를 이용하는 방법
- 휴대폰과 기지국 간의 거리는 기지국으로 부터 휴대폰까지 신호를 보내고 받는 데 따른 지연 시간(lag time)으로 계산
2. 주요 객체 소개
2.1 LocationManager 객체
- 시스템의 위치기반 서비스 접근 지원 하는 객체
- 주기적으로 바뀌는 단말의 위치정보 수신
2.2 LocationListener 객체
-위치정보를 전달 받기 위한 리스너
2.3 Location 객체
-위치는 위도(latitude)와 경도(longitude)로 표시되며 시간은 UTCtimestamp 로 표시되고 그외에 선택적으로 고도(altitude),속도(speed)그리고 bearing정보 표시
3. 기능 구현 순서
3.1 위치관리자 객체 참조 하기
- 코드 37줄
3.2 위치 리스너 구현하기
- 코드 69-98줄
3.3 위치정보 업데이트 요청하기 (동시에 리스너 등록)
- 코드 53줄
3.4 매니페스트에 권한 추가하기
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> // GPS
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> //기지국
4.예제
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MyLocationActivity extends Activity {
TextView text01;
LocationManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text01 = (TextView) findViewById(R.id.text01);
Button button01 = (Button) findViewById(R.id.button01);
button01.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// LocationManager 객체 초기화 , LocationListener 리스너 설정
getMyLocation();
}
});
}
// LocationManager 객체 초기화 , LocationListener 리스너 설정
private void getMyLocation() {
if (manager == null) {
manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
}
// provider 기지국||GPS 를 통해서 받을건지 알려주는 Stirng 변수
// minTime 최소한 얼마만의 시간이 흐른후 위치정보를 받을건지 시간간격을 설정 설정하는 변수
// minDistance 얼마만의 거리가 떨어지면 위치정보를 받을건지 설정하는 변수
// manager.requestLocationUpdates(provider, minTime, minDistance, listener);
// 10초
long minTime = 10000;
// 거리는 0으로 설정
// 그래서 시간과 거리 변수만 보면 움직이지않고 10초뒤에 다시 위치정보를 받는다
float minDistance = 0;
MyLocationListener listener = new MyLocationListener();
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, listener);
appendText("내 위치를 요청 했습니다.");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my_location, menu);
return true;
}
private void appendText(String msg) {
text01.append(msg + "\n");
}
class MyLocationListener implements LocationListener {
// 위치정보는 아래 메서드를 통해서 전달된다.
@Override
public void onLocationChanged(Location location) {
appendText("onLocationChanged()가 호출되었습니다");
double latitude = location.getLatitude();
double longitude = location.getLongitude();
appendText("현재 위치:" + latitude + "," + longitude);
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
}

잘 봤습니다!
답글삭제그런데 my_location 함수에서 에러가나는데.. 구현이없어서 그런듯합니다 ㅠ
layout도 올려주세요
답글삭제