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도 올려주세요
답글삭제