chapter 01 헬로, 안드로이드 가볍게 살펴보는 배경지식 ... 3 그리 멀지 않은 과거에는 ... 3 아드로이드의 미래 ... 4 안드로이드에 대한 오해 ... 5 모바일 개발을 위한 오픈 플랫폼 ... 6 네이티브 안드로이드 애플리케이션 ... 7 안드로이드 SDK의 특징 ... 8 카메라, GPS, 가속도 센서 등의 하드웨어 접근 ... 9 네이티브 구글 맵, 지오코딩, 위치기반 서비스 ... 9 백그라운드 서비스 ... 10 데이터 저장과 검색을 위한 SQLite 데이터베이스 ... 10 공유 데이터와 애플리케이션 간 통신 ... 11 구글 톡을 이용한 P2P 서비스 ... 11 광범위한 미디어 지원과 2D/3D 그래픽스 ... 12 최적화된 메모리와 프로세스 관리 ... 12 오픈 핸드셋 얼라이언스 소개 ... 13 안드로이드의 발전 추이 ... 14 안드로이드의 개발 이유 ... 14 안드로이드 도입을 주도하는 것 ... 15 안드로이드에만 있는 것 ... 16 모바일 개발 판도의 변화 ... 17 개발 프레임워크 소개 ... 17 SDK에는 무엇이 있을까? ... 18 안드로이드 소프트웨어 스택의 이해 ... 19 Dalvik 가상 머신 ... 20 안드로이드 애플리케이션 아키텍처 ... 21 안드로이드 라이브러리 ... 22 고급 안드로이드 라이브러리 ... 23 요약 ... 24 chapter 02 시작하기 안드로이드 애플리케이션 개발하기 ... 29 준비물 ... 29 첫 번째 안드로이드 액티비티 만들기 ... 35 안드로이드 애플리케이션의 종류 ... 41 모바일 애플리케이션 개발하기 ... 43 하드웨어를 고려한 설계 ... 43 사용자 환경 고려하기 ... 48 안드로이드 애플리케이션 개발하기 ... 49 할 일 목록 예제 ... 53 안드로이드 개발 도구 ... 59 안드로이드 애뮬레이터 ... 60 Dalvik 디버그 모니터 서비스(DDMS) ... 61 안드로이드 디버그 브리지 ... 62 요약 ... 62 chapter 03 애플리케이션과 액티비티 만들기 안드로이드 애플리케이션 구성요소 ... 66 애플리케이션 매니페스트 소개 ... 68 매니페스트 에디터 사용하기 ... 72 안드로이드 애플리케이션 수명 주기 ... 73 애플리케이션 우선순위와 프로세스 상태 이해하기 ... 74 리소스 외부화하기 ... 76 리소스 만들기 ... 77 리소스 사용하기 ... 85 할 일 목록 리소스 예제 ... 90 여러 가지 언어와 하드웨어를 위한 리소스 만들기 ... 91 런타임 구성 변경 ... 93 안드로이드 액티비티 좀더 자세히 살펴보기 ... 95 액티비티 만들기 ... 95 액티비티 수명 주기 ... 97 안드로이드 액티비티 클래스 ... 104 요약 ... 105 chapter 04 사용자 인터페이스 만들기 기본적인 안드로이드 UI 디자인 ... 109 뷰 소개 ... 109 뷰를 사용해 액티비티 사용자 인터페이스 만들기 ... 110 안드로이드 위젯 도구 상자 ... 112 레이아웃 소개 ... 113 레이아웃 사용하기 ... 114 새로운 뷰 만들기 ... 115 기존 뷰 수정하기 ... 116 복합 컨트롤 만들기 ... 122 커스텀 위젯과 컨트롤 만들기 ... 124 커스텀 컨트롤 사용하기 ... 139 메뉴 만들고 사용하기 ... 140 안드로이드 메뉴 시스템 소개 ... 140 액티비티 메뉴 정의하기 ... 143 동적으로 메뉴 항목 업네이트하기 ... 146 메뉴 선택 처리하기 ... 147 하위 메뉴와 컨텍스트 메뉴 ... 147 할 일 목록 예제 계속 ... 150 요약 ... 157 chapter 05 인텐트, 브로드캐스트 수신자, 어댑터, 그리고 인터넷 인텐트 소개 ... 160 인텐트를 이용해 액티비티 띄우기 ... 161 인텐트 필터를 이용해 암시적 인텐트 서비스하기 ... 171 플로그 인과 확장성을 위한 인텐트 필터 사용 ... 182 이벤트 방송을 위한 인텐트 사용 ... 185 어댑터 소개 ... 190 어댑터를 이용한 데이터 바인딩 ... 191 인터넷 리소스 사용하기 ... 198 인터넷 리소스에 접속하기 ... 199 인터넷 리소스 이용 극대화하기 ... 200 다이얼로그 소개 ... 200 Dialog 클래스 소개 ... 202 액티비티를 다이얼로그 사용하기 ... 206 지진 뷰어 만들기 ... 207 요약 ... 218 chapter 06 데이터 저장, 검색, 그리고 공유 안드로이드의 데이터 저장 기법 ... 223 간단한 애플리케이션 데이터 저장하기 ... 223 환경설정 만들고 저장하기 ... 224 공유 환경설정 검색하기 ... 225 액티비티 상태 저장하기 ... 225 지진 뷰어를 위한 환경설정 페이지 만들기 ... 230 파일 저장하고 읽어 들이기 ... 241 정적 파일을 리소스로 포함하기 ... 242 파일 관리 도구 ... 242 안드로이드의 데이터베이스 ... 243 SQLite 소개 ... 243 커서와 콘텐트 값 ... 244 안드로이드 데이터베이스로 작업하기 ... 245 콘텐트 공급자 소개 ... 261 콘텐트 공급자 이용하기 ... 262 네이티브 안드로이드 콘텐트 공급자 ... 266 자진 콘텐드 공급자 만들고 이용하기 ... 272 요약 ... 283 chapter 07 맵, 지오코딩, 그리고 위치기반 서비스 위치기반 서비스 이용하기 ... 287 테스트 공급자를 이용해 에뮬레이터 설정하기 ... 287 에뮬레이터 위치 공급자의 위치 업데이트하기 ... 288 테스트 위치 공급자 관리를 위한 애플리케이션 만들기 ... 289 위치 공급자 선택하기 ... 292 이용할 수 있는 공급자 찾기 ... 292 요구 기준에 기반해 공급자 찾기 ... 293 내 위치 찾기 ... 294 현재 위치 찾기 예제 ... 295 움직임 추적 ... 298 '현재 위치 찾기'에 내 위치 업데이트하기 ... 299 근접 경보 사용하기 ... 302 지오코더 사용하기 ... 303 역방향 지오코딩 ... 304 순방향 지오코딩 ... 305 '현재 위치 찾기' 지오코딩하기 ... 307 맵기반 액티비티 만들기 ... 308 MapView와 MapActivity 소개 ... 309 맵기반 액티비티 만들기 ... 309 맵 뷰 구성하고 사용하기 ... 312 맵 컨트롤러 이용하기 ... 313 '현재 위치 찾기' 매핑하기 ... 314 오버레이 만들고 이용하기 ... 318 MyLocationOverlay 소개 ... 328 ItemizedOverlay와 OverlayItem 소개 ... 328 맵과 맵 위치에 뷰 고정하기 ... 330 지진 매핑 예제 ... 332 요약 ... 338 chapter 08 백그라운드에서 작업하기 서비스 소개 ... 343 서비스 만들고 제어하기 ... 343 서비스에 액티비티 바인딩하기 ... 354 백그라운드 작업자 스레드 이용하기 ... 356 새로운 스레드 만들기 ... 357 GUI 작업을 위한 스레드 동기화 ... 357 Earthquake 서비스를 백그라운드 서비스로 옮기기 ... 359 토스트 만들기 ... 359 토스트 커스터마이징하기 ... 361 작업자 스레드에서 토스트 이용하기 ... 362 알림 소개 ... 363 알림 관리자 소개 ... 364 알림 만들기 ... 365 알림 발생시키기 ... 366 지진 모니터에 알림 추가하기 ... 367 고급 알림 기법 ... 370 진행 중 알림과 강조 알림 ... 374 알람 이용하기 ... 374 알람을 이용해 지진 업데이트하기 ... 377 요약 ... 379 chapter 09 피어-투-피어 통신 안드로이드 인스턴트 메시징 소개 ... 382 GTalk 서비스 이용하기 ... 383 GTalk 서비스에 바인딩하기 ... 385 GTalk 연결 생성과 IM 세션 시작 ... 386 현재 상태와 대화 상대 명단 소개 ... 387 채팅 세션 관리하기 ... 391 데이터 메시지 주고받기 ... 395 SMS 소개 ... 398 애플리케이션에서 SMS 이용하기 ... 399 SMS 메시지 보내기 ... 399 SMS 메시지에 귀 기울이기 ... 403 긴급 응답기 SMS 예제 ... 406 긴급 응답기 자동화기 ... 418 요약 ... 429 chapter 10 안드로이드 하드웨어 접근하기 미디어 API 이용하기 ... 432 미디어 리소스 재생하기 ... 433 멀티미디어 기록하기 ... 435 카메라 이용하기 ... 437 카메라 설정 제어하기 ... 438 카메라 미리보기 이용하기 ... 438 사진 찍기 ... 439 센서 관리자 소개 ... 442 가속도 센서와 나침반 이용하기 ... 442 가속도 센서 소개 ... 443 가속도 변화 감지하기 ... 444 속도계 만들기 ... 446 방향 측정하기 ... 450 나침반과 인공 수평의(水平儀) 만들기 ... 452 안드로이드 전화 통신 ... 457 전화 걸기 ... 457 폰 상태와 폰 활동 모니터링 ... 458 데이터 연결 및 활동 모니터링 ... 462 폰 속성 및 상태 접근하기 ... 463 폰 제어하기 ... 463 블루투스 이용하기 ... 464 블루투스 서비스 소개 ... 465 로컬 블루투스 장치 제어하기 ... 465 블루투스 장치 발견하고 결합하기 ... 466 블루투스 연결 관리하기 ... 468 블루투스 통신 ... 468 블루투스 헤드셋 이용하기 ... 470 네트워크 및 Wi-Fi 연결 관리하기 ... 472 인터넷 연결 모니터링 및 관리 ... 472 활성 연결 관리하기 ... 473 Wi-Fi 관리하기 ... 474 장치 진동 제어하기 ... 479 요약 ... 480 chapter 11 고급 안드로이드 개발 편집증 환자, 안드로이드 ... 482 리눅스 커널 보안 ... 483 권한 소개 ... 483 권한 선언하고 적용하기 ... 484 인텐드 방송에 권한 적용하기 ... 485 AIDL을 이용해 서비스를 위한 IPC 지원하기 ... 485 AIDL 인터페이스 구현하기 ... 486 인터넷 서비스 이용하기 ... 492 리치 유저 인터페이스 구축하기 ... 493 애니메이션으로 작업하기 ... 493 애플리케이션에 테마로 스킨 입히기 ... 508 고급 캔버스 그리기 ... 509 SurfaceView 소개 ... 531 인터랙티브한 컨트롤 만들기 ... 535 요약 ... 541 부록 A 안드로이드 1.5 SDK 릴리즈 노트 안드로이드 1.5 SDK, 릴리즈 2 ... 544 안드로이드 1.5 SDK, 릴리즈 1 ... 544 릴리즈 주요 내용 ... 544 SDK 애드온 ... 545 안드로이드 가상 장치(AVD) ... 545 기타 내용 ... 546 부록 B 안드로이드 1.5 플랫폼 주요 기능 사용자 인터페이스 개선 ... 548 성능 향상 ... 548 새로운 기능 ... 549 새로운 API 및 매니페스트 엘리먼트 ... 550 부록 C 안드로이드 1.5 NDK, 릴리즈 1 소개 NDK에 담긴 내용 ... 553 부록 D 맵 API 키 얻기 MD5 핑거프린트 얻기 ... 555 구글 맵 서비스에 핑거프린트 등록하기 ... 556 애플리케이션에 맵 API 키 추가하기 ... 558