JANGUN


안드로이드 프로그래밍



개요

- 모바일 환경의 특성 : 휴대성, 이동성, 무선 통신 및 이동 통신, 다양한 사용자, 다양한 인터페이스 기능, 다양한 사용 환경, 정보처리 가능성, 다기능화, 짧은 라이프 사이클
- 모바일 기기의 특성 : 작은 화면, 제한적 메모리가 있으며, 플랫폼의 특성으로는 하나의 창과 하나의 기능, 제한적인 도움 기능 등
- 모바일 기기의 종류 : 태블릿 PC, PDA, UMPC, PMP, 전자책, 웨어러블 디바이스 등
- 스마트폰 : 기존의 휴대전화 기능에 컴퓨터 수준의 기능을 탑재한 이동 통신 기기
- 스마트폰의 특성 : 전용 운영체제, 디지털 오픈 마켓, 용이성, 이동성
- 스마트폰과 관련된 위치기반서비스, 터치 인터페이스, 운영체제, 애플리케이션 등의 기술들이 빠르게 발전하고 있다.
- 스마트폰은 기존의 휴대전화 기능에 컴퓨터 수준의 기능을 탑재한 이동 통신 기기를 말한다.
- 스마트폰의 특성으로는 전용 운영체제, 디지털 오픈 마켓, 용이성, 이동성을 들 수 있다.
- 스마트폰과 관련된 위치기반서비스, 터치 인터페이스, 운영체제, 애플리케이션 등의 기술들이 빠르게 발전하고 있다.

- 아이폰의 운영체제인 iOS 7에는 제어센터, 알림센터, AirDrop, Siri, 그리고 효율적인 멀티태스킹 등과 같은 새로운 기능들이 있다.
- iOS는 애플 기기에만 탑재 가능하며, 4개의 계층구조로 구성된 iOS 플랫폼이 존재한다. 안드로이드폰의 운영체제인 Android는 구글의 기본적인 서비스가 탑재되어 있으며, 리눅스 커널 위에서 동작하며 C/C++ 라이브러리를 포함하고 있다.
- 안드로이드 플랫폼은 운영체제에서 미들웨어, 자바 언어로 작성된 애플리케이션을 포함하고 있다.
- 스마트폰 센서를 위치, 방향 등 주변 상황을 감지하는데 주로 활용되고 있다.
- 향후 신체 정보, 사용자 행동, 감정 등을 인식하는 센서로의 기능 확대가 예상되며 인터넷과 연결되어 다양한 정보가 연계된 서비스로 발전할 전망이다.
- 센서 종류로는 카메라, 마이크로폰, 근접, 조도, 중력, GPS, 가속도, 지자기, 자이로스코프, 기압계, 동작인식, 나침반, 온도/습도, 기압, 제스처, 지문 센서 등이 있다.

- 안드로이드 운영체제 : Linux 기반의 모바일 오픈소스 플랫폼
- 안드로이드 운영체제 아키텍쳐 : 애플리케이션, 안드로이드 플랫폼, 하드웨어로 구성됨
- 안드로이드 운영체제 구성요소
- Dalvik 바이트 코드의 실행 과정


- 안드로이드 프로그래밍 개발을 위해서는 JDK, 이클립스, ADT 플러그인, SDK, AVD 생성 순으로 설치해야 한다.
- 액티비티 생명주기는 시작, 실행, 활성, 비활성화, 정지, 종료되는 일련의 상태 순환을 의미하며, 메소드 별로 하는 일이 정해져있다.




- 안드로이드 프로그래밍
- java\MainActivity.java : 메인 자바 프로그램
- Build\R.java : 프로그램 실행위한 자원의 ID, 속성값 저장
- res\layout\activity_main.xml : 화면 구성을 정의
- res\values\Strings.xml : 문자열의 내용을 정의
- manifest\AndroidManifest.xml : 프로젝트의 버전이나 이름, 구성, 주요 특성 정의
- res\drawable\ : 이미지가 저장되는 폴더


- 액티비티: 안드로이드 애플리케이션에서 사용자와 상호작용이 발생되는 하나의 창으로 앱의 화면을 구성하는 단위, 자체는 화면에 직접 보이지 않음.
- 뷰: 사용자에게 보여지는 실체를 구현함. 여러 뷰가 모여서 액티비티를 구성.
- 뷰 그룹: 직접적으로 보이지 않으며 여러 뷰를 담는 쟁반(컨테이너) 역할, 여러 뷰를 유기적으로 모아 놓기 위한 수단으로 일반적으로 레이아웃이라고 함.
- 위젯: 직접적으로 보이며 사용자 인터페이스를 구성함. 모든 위젯은 뷰에 속함.

- 안드로이드 프로젝트 구성 요소 : src, gen, res, Manifest 파일 등. View의 계층 : 여러 개의 View가 모여서 액티비티 하나를 구성하고 액티비티 여러 개가 모여서 하나의 어플리케이션이 됨.

- mageView : 아이콘이나 비트맵을 출력하는 위젯
- Button : 사용자가 클릭하여 명령을 내릴 수 있는 위젯
- EditText : 문자열을 입력받는 위젯
- LinearLayout : 차일드 뷰를 일렬로 배치(vertical-수직, horizontal-수평)


- 리니어 레이아웃 정렬 지정 : gravity, layout_gravity, baselineAligned, layout_weight, padding, layout_margin
- 렐러티브 레이아웃 : 뷰와 부모와의 관계 또는 뷰끼리의 관계를 지정함으로써 차일드를 배치하는 레이아웃
- 앱슬루트 레이아웃 : 관계나 순서에 상관없이 지정한 절대 좌표에 차일드 뷰를 배치하는 방법
- FrameLayout : 차일드를 배치하는 규칙이 따로 없고 모든 차일드는 프레임의 좌상단에 나타나며 추가된 순서대로 겹쳐서 표시하는 레이아웃. TableLayout : 표 형식으로 차일드를 배치하는 레이아웃. 레이아웃 중첩 : 레이아웃 자체도 View의 파생 클래스이므로 레이아웃끼리 중첩시키는 것이 가능함.


- 캔버스 : Customview, Canvas, Paint, getColor, setStrokeCap, setStrokeJoin, setStyle 그리기 객체 : 표 형식으로 차일드를 배치하는 레이아웃. 그 외의 출력 : Toast(작은 팝업 대화 상자), 비프음

- 이벤트 처리 방법 : 콜백 메소드의 재정의, 리스너 인터페이스의 구현, 액티비티를 통한 리스너의 구현, 뷰를 통한 리스너의 구현 핸들러의 우선순위 : 이벤트 핸들러가 중복 정의되어 있을 경우 미리 정한 우선순위에 따라 적절한 핸들러를 선택해 호출함

- 화면 터치 이벤트 : 다음의 콜백 메소드나 리스너의 핸들러를 이용해서 처리함.
- 키보드 입력 이벤트 : 다음의 콜백 메소드가 처리함.
- 위젯 이벤트 처리(버튼) : Button은 차일드 위젯이며 Button 클래스를 바로 사용하는 것이 가능하므로 상속을 받지 않고도 이벤트를 처리할 수 있음.
- 타이머 이벤트 : 타이머 처리를 위해 Handler 클래스를 사용함.

- 추가 액티비티 : 메인 액티비티에서 서브 액티비티를 호출하기 위해서는 매니페스트에 반드시 등록해야 함. 인텐트 : 액티비티, 서비스, CP, BR 등의 컴포넌트들이 수행해야 할 작업에 대한 정보를 가지며 작업 결과를 돌려 주기 위해서도 사용됨. 액티비티의 생명주기 : 액티비티는 처음 생성되어 완전히 파괴될 때까지 시작, 실행, 활성, 비활성화, 정지, 종료 되는 일련의 상태를 거침.

- 어댑터 뷰 : 어댑터 뷰들은 항목에 해당하는 여러 개의 차일드 뷰를 가질 수 있으며, 사용자와의 상호 작용도 처리할 수 있음. 리스트 뷰 : 항목들을 수직으로 펼쳐서 보여줌. 스피너 : 클릭할 때만 팝업으로 펼쳐지는 것으로 화면이 좁은 모바일 환경에서 면적을 적게 차지한다는 장점이 있음.
- 그리드 : 항목들을 2차원의 표 형태로 출력하는 위젯.



- AlertDialog 생성 : 사용자에게 전달 사항을 알리고 질문을 통해 사용자의 선택을 받아들이는 기본적인 통신 수단으로 사용하기 위한 기능. AlertDialog 버튼 : AlertDialog에 버튼을 배치할 때는 최대 3개까지의 버튼을 표시할 수 있음(긍정, 부정, 중립). AlertDialog 미리생성 : 매번 생성하지 않고 미리 AlertDialog를 만들어 놓고 필요할 때 보이도록 할 수 있는 기능.
- 알림 메시지 전달 : 사용자에게 뭔가를 알리고 다음 작업에 대한 지시를 받기 위한 기능.
- 백그라운드 알림 : 프로그램의 상태나 특정 사건이 발행했음을 사용자에게 Notification하는 것으로 다양한 방법이 있음. Notification 출력 : Notification를 출력하려면 Notification 관리자와 Notification 객체를 사용해야 함.