Do it! 안드로이드 앱프로그래밍 12일차 (19.05.23)

2019. 5. 24. 03:53Engineer/안드로이드 앱 프로그래밍

반응형


 Chapter 11. 위치기반 서비스와 앱 위젯 


   11-1 GPS를 이용해 나의 위치 확인하기


안드로이드에서는 위치 확인을 위한 시스템 서비스로 'LocationManager'를 제공한다. android.location 패키지에는 이 클래스를 포함하여 위치 정보를 확인하거나 확인된 위치 정보를 사용하는데 필요한 클래스들이 정의 되어있다. 


위치 관리자에게 위치 정보를 요청하여 현제의 위치를 확인하는 방법

  • 1단계 위치 관리자 객체 참조하기 : 위치 관리자(LocationManager)는 시스템 서비스로 제공되므로, getSystemService( )메소드로 위치관리자 객체 참조
  • 2단계 위치 리스너 구현하기 : 위치관리자가 알려주는 현재 위치는 위치 리스너를 통해 받게 되므로 새로운 리스너를 구현하여 전달 받은 위치 정보 처리
  • 3단계 위치 정보 업데이트 요청하기: 위치 관리자에게 위치정보가 변경될 때마다 알려달라고 요청하기 위해 requestLocationUpdate( ) 메소들르 호출. 이 메소드의 파라미터로 위치 리스너 객체 전달
  • 4단계 매니페스트에 권한 추가하기 : GPS를 사용할 수 있도록 메니패스트 파일에 ACCESS_FINE_LOCATION 권한을 추가 


getLastKnownLocation( ) 메소드에 위치 정보 제공자를 파라미터로 전달. 안드로이드는 위치 제공자를 크게 GPS_PROVIDER와 NETWORK_PROVIDER로 구분. 그러면 Location 객체가 리턴되며 이 안에는 위도와 경도 값을 포함하고 있으므로, getLatitude( ), getLongitude( ) 메소드로 값을 확인 가능


위치 리스너에는 위치 제공자의 상태를 확인한느 메소드와 함꼐 위치 정보를 전달할 때 호출되는 onLocationChanged( ) 메소드가 함께 정의되어 있으며 대부분의 경우에는 이 메소드만 구현하는 것으로도 충분


위치 관리자에게 현재 위치를 알려달라고 요청하기 위해서는 requestLocationUpdate( ) 메소드를 호출해야 하는데 파라미터로는 최소 시간과 최소 거리 그리고 위치 리스너 객체를 전달


   11-2 현재 위치의 지도 보여주기


위치 관리자로 부터 얻은 위치정보를 이용하여 지도로 보여주는 것. 지도로 보여주기 위해서는 아래와 같은 내용을 기억해야 한다. 

  • Play Services 라이브러리 사용 설정하기 : 구글맵 서비스 v2는 Play Services 라이브러리를 사용. 구글맵을 사용하려면 이 라이브러리를 추가해야함 (SDK Manger에서 Google Play services 모듈설치한 뒤 Project Structure에서 Library dependency에 com.google.ansdroid.gms:play-services-maps 항목 OK설정 )
  • XML 레이아웃에 맵프래그먼트 추가하기 : 앱 화면에 지도를 넣으려면 XML 레이아웃에 맵프래그먼트를 추가해야함
  • 소스코드에서 내 위치로 지도 이동시키기 : 지도를 띄울때 내 위치가 보여야 하므로 소스코드에 animateCamera( )메소드로 지도를 이동시키는 기능 추가
  • 메니패스트에 설정 추가하기 : 지도를 사용하려면 권한 필요. 이 외에도 필요한 설정 정보를 메니페스트에 등록
  • 지도 API 키 : 구글맵 서비스를 사용하려면 구글 콘솔에서 지도 API 키를 발급 받아 앱의 매니페스트에 넣어주어야함. 발급은 http://console.developers.google.com

   11-3 지도에 아이콘 추가하기


구글맵의 지도의 가장 기본적인 정보들은 타일 모양의 이미지로 만들어 놓고 이 이미지들을 보여주게 되며, 내위치, 커피숍 등을 별도의 오버레이(Overlay)로 정의하여 추가 할 수 있도로 되어있다. 따라서 지도에 내위치를 아이콘으로 보여주기 위해서는 간단하게 setMyLocationEnabled(True)로 메소드를 호출하여 API를 이용하여 오버레이로 추가하는 방법이 있음


다른 방법으로는 마커(이미지 같은 걸로)를 사용하는 방법이 있다. MarkerOptions 객체에 표시에 사용할 이미지와 위치정보 등을 넣고, addMarker( )메소드로 지도에 표시하면 된다. 


   11-4 앱 위젯 만들기


앱 위젯은 안드로이드 단말의 홈 화면에서 위젯을 바로 보여주고 싶을 때 사용


앱 위젯이 홈화면 안의 일정 영역을 할당 받아 보여지긴 하지만 기능이 독립적으로 동작하기보다는 기능의 결과 화면만을 보여주는 형태이므로 일반 애플리케이션과 다른 구조를 가짐


앱 위젯의 구성

  • 앱 위젯 호스트 (App Widget Host) : 위젯을 담고 있는 그릇
  • 앱 위젯 제공자 (App Widget Provider) : 위젯을 보여주는 제공자
앱 위젯 구성을 위한 요소
  • 앱 위젯의 초기 뷰 레이아웃 : 앱 위젯이 처음 화면에 나타날 때 필요한 레이아웃을 정의
  • 앱 위젯 제공자 정보객체 : 앱 위젯을 위한 메타데이터(레이아웃, 업데이트 주기 등) 정보와 앱 위젯 제공자 클래스에 대한 정보를 가지고 있음
  • 앱 위젯 제공자 : 앱 위젯과 정보를 주고받기 위한 기본 클래스. 브로드캐스트 수신자로 만들며 앱 위젯의 상태 변화에 따른 기능을 구현

앱 위젯으로 나타날 뷰의 모양은 액티비티나 뷰 그룹을 위해 만드는 일반적인 XML 레이아웃과 동일하나 앱 위젯에 보든 뷰가 들어갈수 있는 것은 아님


앱 위젯의 크기는 홈 화면의 화면 분할에 따라 74dp 단위로 설정 권장. 가장 적절한 크기는 72dp x 294dp (가장자리 표시를 위해 2dp씩 뺐음)


스레드를 이용하면 앱 위젯으로 만든 텍스트나 이미지에 애니메이션을 적용할 수 있지만 사용자가 항상 보도록 설정되어 있으므로 단말의 전원 소모량이나 정보가 바뀌는 주기를 잘 고려하여 적용해야함





반응형