머리말 ... 16 Chapter 1. 시작하기 ... 9 1.1 안드로이드 OS ... 22 1.2 안드로이드 OS 코드 네임 ... 23 1.3 안드로이드 OS 기본 제공 애플리케이션 ... 25 1.4 오픈 핸드셋 얼라이언스(OHA) ... 26 Chapter 2. 안드로이드 OS에 대한 이해 ... 27 2.1 안드로이드 OS의 특징 ... 28 2.2 안드로이드 OS의 레이어 ... 29 2.3 안드로이드 OS의 라이브러리 ... 32 2.4 안드로이드 OS의 개발 제약 사항 ... 34 하드웨어의 제약 ... 34 효율적인 코드의 작성 ... 35 높은 반응성 ... 36 자연스러운 흐름의 사용자 경험 ... 37 Chapter 3. 안드로이드 SDK ... 39 3.1 안드로이드 SDK의 특징 ... 40 하드웨어 액세스 ... 41 위치 기반 서비스 ... 41 백그라운드 서비스 ... 42 SQLite 데이터베이스 ... 42 공유 데이터 및 프로세스 간 통신 ... 42 미디어 및 그래픽 ... 43 메모리 및 프로세스 관리 ... 43 3.2 안드로이드 SDK 설치하기 ... 44 설치 환경 확인하기 ... 44 개발 도구 다운로드 ... 45 개발 도구 설치 ... 49 Java 개발 킷 설치 ... 49 안드로이드 SDK 설치 ... 53 SDK Manager 실행하기 ... 61 Eclipse 통합 환경 설치 ... 64 ADT 플러그인에 대하여 ... 64 ADT 플러그인 설치하기 ... 65 Chapter 4. Hello World ... 77 4.1 프로젝트 생성하기 ... 78 4.2 가상 장치 ... 80 가상 장치 생성하기 ... 80 4.3 프로젝트 실행하기 ... 82 실행 구성 지정하기 ... 82 가상 장치에서 실행하기 ... 84 실제 장치에서 실행하기 ... 86 4.4 프로젝트 기본 구조 ... 89 액티비티 ... 89 레이아웃 ... 90 리소스 ... 92 Chapter 5. 애플리케이션 ... 95 5.1 애플리케이션 구성 요소 ... 96 액티비티 ... 96 인텐트 ... 96 콘텐츠 프로바이더 ... 97 알림 ... 97 브로드캐스트 리시버 ... 97 서비스 ... 97 5.2 애플리케이션 매니페스트 ... 98 manifest 노드 ... 98 application 노드 ... 99 activity 노드 ... 99 service 노드 ... 100 provider 노드 ... 100 receiver 노드 ... 100 uses-permission 태그 ... 101 permission 태그 ... 103 안드로이드 매니페스트 에디터 ... 103 5.3 애플리케이션의 수명 주기와 우선순위 ... 106 프로세스 상태에 따른 우선순위 ... 106 Chapter 6. 액티비티 ... 111 6.1 액티비티에 대하여 ... 113 6.2 액티비티 생성하기 ... 113 6.3 액티비티 수명 주기 ... 116 6.4 액티비티 스택 ... 116 6.5 액티비티 상태 ... 118 6.6 상태 변화 감시 ... 119 onCreate ... 120 onRestoreInstanceState ... 120 onRestart ... 120 onStart ... 121 onResume ... 121 onSaceInstanceState ... 121 onPause ... 122 onStop ... 122 onDestroy ... 123 6.7 액티비티 수명 ... 123 전체 수명(Full Lifetime) ... 123 가시 수명(Visible Lifetime) ... 124 활성 수명(Active Lifetime) ... 125 6.8 안드로이드가 제공하는 액티비티 클래스 ... 126 ActivityGroup ... 126 ListActivity ... 126 ExpandableListActivity ... 126 Chapter 7. 뷰와 레이아웃 ... 127 7.1 뷰 ... 128 7.2 사용자 인터페이스 구축하기 ... 128 7.3 안드로이드 기본 위젯 ... 130 7.4 레이아웃 ... 131 FrameLayout ... 131 LinearLayout ... 132 RelativeLayout ... 134 TableLayout ... 136 AbsoluteLayout ... 137 7.5 레이아웃 구축하기 ... 138 7.6 예제: Task Notes 첫 번째 버전 ... 140 프로젝트 생성하기 ... 140 레이아웃 수정하기 ... 142 소스 코드 수정하기 ... 147 실행하기 ... 150 Chapter 8. 리소스 ... 153 8.1 리소스 생성하기 ... 154 8.2 상수 ... 156 문자열 상수 ... 157 색상 ... 158 치수 ... 159 8.3 스타일 ... 160 8.4 드로어블 ... 161 8.5 레이아웃 ... 163 8.6 애니메이션 ... 163 트윈드 애니메이션 ... 164 프레임 바이 프레임 애니메이션 ... 166 8.7 리소스 사용하기 ... 167 코드에서 직접 리소스 사용하기 ... 167 리소스 연결 참조하기 ... 170 공통 시스템 리소스 사용하기 ... 171 현재 사용 중인 테마에서 스타일을 실시간으로 참조하기 ... 172 8.8 국제화와 지역화 ... 172 국제화를 위한 리소스 생성하기 ... 173 ISO 69-1 언어 코드 ... 174 ISO 3166-1-alpha-2 언어 코드 ... 175 8.9 런타임 실시간 구성 변경 ... 176 Chapter 9. 커스텀 컨트롤 ... 179 9.1 기존 컨트롤 변경하기 ... 181 9.2 복합 컨트롤 생성하기 ... 183 9.3 예제: Task Notes 두 번째 버전 ... 187 9.4 새로운 커스텀 컨트롤 생성하기 ... 204 비주얼 인터페이스 생성하기 ... 205 컨트롤 그리기 ... 206 컨트롤 크기 계산하기 ... 207 상호 작용 이벤트 처리하기 ... 210 9.5 예제: Clock 첫 번째 버전 ... 211 Chapter 10. 메 뉴 ... 229 10.1 안드로이드 메뉴 시스템 ... 230 아이콘 메뉴 ... 230 확장 메뉴 ... 231 연관 메뉴 ... 232 10.2 액티비티 옵션 메뉴 ... 233 10.3 메뉴 항목 설정 ... 234 간결한 제목 ... 234 아이콘 ... 235 체크 박스 ... 235 라디오 버튼 ... 236 단축 키 ... 236 메뉴 항목 동적 업데이트 ... 237 10.4 메뉴 항목 선택하기 ... 238 메뉴 항목 클릭 리스너 ... 238 인텐트 ... 238 메뉴 선택 이벤트 핸들러 ... 239 10.5 화면 중앙에 떠 있는 메뉴 ... 239 하위 메뉴 ... 239 연관 메뉴 ... 240 10.6 예제: Task Notes 세 번째 버전 ... 242 Chapter 11. 인텐트 ... 275 11.1 인텐트란 무엇인가 ... 276 11.2 액티비티 시작 ... 277 확실하게 액티비티 시작하기 ... 278 암시 인텐트를 통해 액티비티 시작하기 ... 278 액티비티 결화 반환 ... 279 11.3 기본 안드로이드 액션 ... 282 11.4 인텐트 필터 ... 284 인텐트 필터 처리 방식 ... 286 인텐트 필터에 반응하기 ... 287 인텐트 필터 일치 반응 거부하기 ... 288 11.5 Linkify 클래스 ... 289 11.6 예제: ContactSelector 첫 번째 버전 ... 293 11.7 인텐트 필터 플러그인 모델 ... 307 익명 액션 ... 307 액티비티 메뉴에 통합하기 ... 308 11.8 인텐트 전체 브로드캐스팅 ... 309 인텐트로 이벤트 브로드캐스팅하기 ... 309 브로드캐스트 리시버 ... 310 기본 제공 브로드캐스트 액션 ... 313 Chapter 12. 어댑터 ... 315 12.1 기본 제공 어댑터 ... 316 12.2 어댑터를 이용한 데이터 연결 ... 317 12.3 예제: Task Notes 네 번째 버전 ... 317 12.4 SimpleCursorAdapter ... 337 Chapter 13. 대화 상자 ... 339 13.1 Dialog 클래스 ... 341 13.2 AlertDialog 클래스 ... 343 13.3 특수 입력 대화 상자 ... 346 13.4 대화 상자 재사용하기 ... 348 13.5 액티비티를 대화 상자 스타일로 사용하기 ... 350 Chapter 14. 데이터 처리 ... 361 14.1 파일 스트림 ... 352 14.2 원시 데이터 파일 리소스화하기 ... 353 14.3 환경 설정 ... 354 공유 환경 설정 생성 및 저장하기 ... 354 공유 환경 설정 얻기 ... 355 14.4 액티비티 설정 ... 356 액티비티 설정 저장하기 ... 356 액티비티 설정 읽어오기 ... 356 14.5 인스턴스 상태 관리하기 ... 357 14.6 예제: Task Notes 다섯 번째 버전 ... 358 Chapter 15. 데이터베이스 ... 371 15.1 SQLite에 대하여 ... 372 15.2 커서 ... 373 15.3 데이터베이스 어댑터 ... 374 15.4 데이터베이스 질의 ... 379 데이터베이스 질의 결과 얻기 ... 379 15.5 행 ... 380 행 삽입 ... 381 행 갱신 ... 381 행 삭제 ... 381 15.6 예제: Task Notes 여섯 번째 버전 ... 382 Chapter 16. 콘텐츠 프로바이더 ... 407 16.1 ContentResolver ... 408 콘텐츠 질의하기 ... 409 콘텐츠 삽입하기 ... 409 콘텐츠 삭제하기 ... 410 콘텐츠 갱신하기 ... 411 파일 스트림 사용하기 ... 411 16.2 기본 제공 콘텐츠 프로바이더 ... 412 미디어 스토어 콘텐츠 프로바이더 ... 412 연락처 콘텐츠 프로바이더 ... 413 16.3 콘텐츠 프로바이더 생성하기 ... 414 16.4 콘텐츠 프로바이더 인터페이스 생성하기 ... 416 16.5 콘텐츠 프로바이더 등록하기 ... 418 Chapter 17. 위치 기반 서비스 ... 419 17.1 LBS ... 420 17.2 가상 장치에 위치 기반 서비스 설정하기 ... 421 17.3 위치 프로바이더 선택하기 ... 427 위치 프로바이더 선택 조건 ... 428 현재 위치 ... 430 17.4 예제: CurLoc 첫 번째 버전 ... 431 17.5 위치 정보 갱신 ... 446 17.6 예제: CurLoc 두 번째 버전 ... 447 17.7 지오코딩 ... 452 역방향 지오코딩 ... 453 순방향 지오코딩 ... 454 17.8 예제: CurLoc 세 번째 버전 ... 455 Chapter 18. 지도 ... 463 18.1 구글 지도 API 키 ... 464 MD5 지문 획득하기 ... 464 MD5 지문 등록하기 ... 468 18.2 지도 액티비티 ... 470 지도 관련 클래스 ... 470 지도 액티비티 생성하기 ... 471 지도 뷰 추가 구성 요소 ... 474 지도 컨트롤러 ... 475 18.3 예제: CurLoc 네 번째 버전 ... 477 18.4 근접 경보 ... 488 18.5 오버레이 ... 490 오버레이 생성하기 ... 490 Projection 클래스 ... 491 오버레이에 그리기 ... 492 사용자 입력 처리하기 ... 493 오버레이 리스트 관리하기 ... 494 Chapter 19. 서비스와 알림 ... 495 19.1 서비스 ... 496 서비스 생성하기 ... 497 서비스 시작하기 ... 498 서비스 중지하기 ... 498 서비스 연동하기 ... 499 19.2 백그라운드 워커 스레드 ... 501 새로운 스레드 생성하기 ... 501 스레드 동기화하기 ... 501 19.3 토스트 ... 503 19.4 알림 ... 505 알림 생성하기 ... 506 추가 알림 방식 ... 508 알림 플래그 ... 510 19.5 알람 ... 511 알람 생성하기 ... 512 Chapter 20. 하드웨어 ... 515 20.1 카메라 ... 516 사진 촬영하기 ... 517 화면 미리보기 ... 518 카메라 설정 변경하기 ... 518 20.2 하드웨어 센서 ... 521 가속도 센서 ... 524 방향 센서 ... 525 20.3 예제: Speedometer 첫 번째 버전 ... 526 Chapter 21. 통신 ... 535 21.1 전화 ... 536 전화 걸기 ... 536 전화 통신/통화 서비스 ... 537 통화 전달 상태 확인 ... 540 전화 통화 상태 확인 ... 541 접속 중인 기지국 변동 확인 ... 542 데이터 통신 관련 활동 확인 ... 543 데이터 연결 상태 확인 ... 544 서비스 상태 확인 ... 546 전파 신호 세기 확인 ... 548 전화 속성 ... 548 21.2 블루투스 ... 549 블루투스 권한 설정 ... 549 블루투스 설정 ... 550 블루투스 장치 탐색 ... 553 장치 연결하기 ... 559 연결 관리하기 ... 565 프로파일 처리하기 ... 567 제조사 정의 AT 명령어 처리하기 ... 569 21.3 네트워크 연결 관리 ... 570 인터넷 연결 관리 ... 570 사용 가능한 연결 관리 ... 571 Wi-Fi ... 573 Chapter 22. 지진정보 애플리케이션 ... 577 22.1 프로젝트 기본 구축하기 ... 579 지진 정보 클래스 생성하기 ... 580 인터넷에서 지진 정보 얻어오기 ... 583 메뉴 추가하기 ... 591 세부 정보 보기 ... 593 22.2 환경 설정 추가하기 ... 598 환경 설정 액티비티 추가하기기 ... 598 환경 설정 메뉴 추가하기 ... 608 환경 설정 적용하기 ... 611 22.3 지진 정보 콘텐츠 프로바이더 ... 622 콘텐츠 프로바이더 구축하기 ... 622 콘텐츠 프로바이더 사용하기 ... 631 22.4 지도에 위치 표시하기 ... 636 지도 액티비티 추가하기 ... 636 오버레이를 이용하여 정보 표시하기 ... 643 22.5 서비스 사용하기 ... 650 서비스 구축하기 ... 650 서비스 이용하기 ... 650 백그라운드 스레드 사용하기 ... 671 22.6 알림 막대 사용하기 ... 678 22.7 알람 사용하기 ... 684 찾아보기 ... 691