Android App 개발기초 & Activity, Intent 세미나 2012. 03. 26 ING 팀여상권, 이용균, 최상욱, 권지해
목차 프로젝트생성과정설명 안드로이드동작, 구조설명 Activity 설명 Intent 설명 질문 1
프로젝트생성과정설명 1. Eclipse의메뉴바에서 File 선택 2. New선택후 Android Project 선택 3. Project Name 기입후 next 버튼클릭 4. 사용할 Android 플랫폼선택 5. Package Name 기입후 Finish 2
프로젝트생성과정설명 1 선택 3
프로젝트생성과정설명 2 프로젝트이름입력 3 프로젝트의안드로이드플랫폼버전설정 4
프로젝트생성과정설명 4 프로젝트생성 패키지이름입력 패키지이름이필요한이유 : - 가정 ( 예시 ) A 회사에서하나의프로젝트를두개의팀이분담해서작업을함우연치않게두팀이동일한클래스이름을사용하여프로그램을작성작업이끝나고하나로합칠시동일한클래스이름으로인해합쳐지지않음이러한상황을미연에방지하기위해패키지이름을사용한다즉동일한클래스이름일지라도패키지이름이다르므로구분이가능하다! 5
안드로이드프로젝트폴더설명 6
안드로이드프로젝트폴더설명 7
안드로이드프로젝트폴더설명 8
안드로이드프로젝트폴더설명 9
안드로이드프로젝트폴더설명 10
안드로이드프로젝트폴더설명 11
결과화면? 결과 화면 아무런코드를삽입하지않았는데 에뮬레이터에다음과같은결과화면이나타난것을볼수있다. 어떻게된것일까??? 12
Android Program 구조설명 13
Android Program 구조설명 14
Android Program 구조설명 ~Activity.java 파일에서 ~.xml 파일을참조하여화면에표시한다. ~.xml 파일에서사용하는값들을 ~Activity.java 파일에서사용하기위해 ~.xml 파일에서 id 값을정의함. 정의된 id 값들은 R.java 파일에등록되고해당 id 값과메모리값이매칭되어 activity.java 파일에서사용가능 ~.xml 파일에서 strings.xml 파일에존재하는문자를참조하여사용가능 왜이런방식을사용했을까?? 화면을구성하는부분은디자이너가설계함코드작성부분은프로그래머가담당함 -> 디자이너와프로그래머의역할분담이가능 strings.xml 과같이문자열을정의하는부분을따로설정하여다양한언어지원가능 15
Activity Activity : 1. 활발한움직임, 활기 2. ( 취미나특별한목적을위한 ) 활동 -> 이용어의의미는 " 가시적 " 인성격. 즉, 눈으로볼수있는것. 액티비티 (Activity) = 안드로이드어플의화면을구성하는주요단위 보통하나의화면이하나의액티비티라고봐도무방함 16
Activity 뷰여러개가모여서액티비티하나를구성 액티비티여러개가모여서응용프로그램이된다. 17
Activity 를생성하여화면에띄어보자! 액티비티생성을위해새로운엑티비티를만듬 1. HelloAndroActivity.java 파일을복사 (Ctrl+C) 2. 패키지선택후붙여넣기 (Ctrl+V) 3. 동일한엑티비티이름이므로다른엑티비티이름을지정 CopyActivity 라고이름을지정 18
Activity 를생성하여화면에띄어보자! HelloAndroActivity CopyActivity 화면을구성하는 xml 파일이동일함 복사된엑티비티가다른화면을출력해주기위해 xml 파일도새로생성해주어야함 xml 파일도 Activity.java 파일과동일한방법으로복사 & 붙여넣기를하여 layout 에 xml 파일을추가 19
Activity 를생성하여화면에띄어보자! copy.xml 기존의엑티비티와차이를위해다른값을설정 CopyActivity.class CopyActivity.class 새로운 xml 파일로설정 20
Activity 를생성하여화면에띄어보자! * 엑티비티추가는 AndroidManifest.xml 파일에알려주어야함 AndroidManifest.xml 추가!!!! 21
Activity 를생성하여화면에띄어보자! 결과화면 결과값은변하지않았다!!! 어떻게된것인가? 당연하다! 프로젝트시작시처음보여주는엑티비티 (HelloAndroActivity.java) 에서아무런코드도추가하지않았다. ( 단순히새로운엑티비티를만들기만함 ) 즉새로만든엑티비티를띄우긴위해서는다른작업이필요하다! -> 필요한것 : 인텐트 ( 다음장설명 ) 22
Intent : Intent 1. 의지, 의향 (intention); 목적, 계획 2. 의미, 취지 어플리케이션구성요소간에정보를전달하는역할, 그정보를이용하여 시스템이구성요소를실행하던지데이터를전달하는역할을한다. 23
Intent Android 의애플리케이션의 대표적인구성요소 24
Intent Intent 명시적 Intent 인텐트에클래스객체나컴포넌트이름을지정하여호출할대상을확실히알수있는인텐트 암시적 Intent 액션과데이터를지정하긴했지만호출할대상이달라질수있는경우 [Intent Reference] Intent intent = new Intent() Intent intent = new Intent( Intent o ) Intent intent = new Intent( String action [,Uri uri]) Intent intent = new Intent( Context packagecontext, Class<?> cls) Intent intent = new Intent( String action, Uri uri, Context packagecontext, Class<?> 25 cls)
명시적인텐트 호출할대상을확실히지정 [Reference] startactivity() or startactivityforresult() startservice() or bindservice() broadcastintent() startactivity() 단순히 Activity 를호출하는 Method 결과를 return 받을필요가없는경우 startactivityforresult() Activity 호출에따라수행된결과를리턴해야할경우 26
명시적인텐트 *Activity 설명시추가한 Activity 를명시적인텐트를사용하여띄어보자! 1. 사용자로부터입력을받기위해 TextView 를 Button 으로바꾸고 id 값을지정한다. 수정 27
명시적인텐트 2. findviewbyid 메소드를사용하여 xml 파일에서사용한 Button 객체를생성한다. 3. ~Activity.java 파일에서버튼을클릭하였을때호출되는리스너를등록한다. 4. 버튼을클릭하였을때호출되는메소드 (onclick) 에인텐트를생성하고 startactivity 메소드를사용하여인텐트를전달한다. 28
명시적인텐트 결과화면 결과화면 버튼클릭시새로운엑티비티로전환됨 29
암시적인텐트 속성 ACTION_DIAL tel:01077881234 ACTION_VIEW tel:01077881234 ACTION_EDIT content://contacts/people/2 ACTION_VIEW content://contacts/people 설명 주어진전화번호를이용해전화걸기화면을보여줌 주어진전화번호를이용해전화걸기화면을보여줌. VIEW 액션이다른기능을수행함 전화번호부데이터베이스에있는정보중에서 ID 값이 2 인정보를편집하기위한화면을보여줌 전화번호부데이터베이스의내용을보여줌 30
암시적인텐트 암시적 Intent 생성 버튼클릭시전화거는화면으로전환됨 31
startactivityforresult() startactivityforresult() 사용의예 32
startactivityforresult() 의사용예 ~Activity.class Intent 가전달될때어떤곳에서전달된 Intent 인지구분하기위한상수값 명시적으로수행될 Activity 의 class 를지정함 버튼생성후, Intent 생성, startactivityforresult 로 Intent 전달 33
startactivityforresult() 의사용예 startactivityforresult 메소드가수행되고실행될 Activity 버튼생성후, Intent 생성생성된 Intent 를 setresult 메소드를사용하여호출한엑티비티로넘겨줌 생성한 Intent 에 name 이라는필드와 mike 라는값을 putextra 메소드를사용하여넣어줌 ( 이러한방식으로 Intent 에데이터를넣고엑티비티간의정보전달이가능 ) setresult(resultcode, Intent) ResultCode : 호출한엑티비티에게엑티비티의실행상태를넘겨주는값으로보통 RESULT_OK ( 성공 ) 또는 RESULT_CANCELED ( 실패 ) 값을넘겨준다. (RESULT_CANCELED, RESULT_OK 값은상수값으로미리정의되어있다.) 34
startactivityforresult() 의사용예 * 호출한엑티비티로부터 setresult 메소드가실행되면이를처리할수있도록기존의엑티비티에서자동으로처리해주는 callback 함수를등록해야한다.! 필요한함수재정의하는방법 ( 마우스오른쪽버튼클릭후다음과같이 Source->Override/Implement Methods 클릭 ) 35
startactivityforresult() 의사용예 재정의할메소드를체크한뒤 OK 버튼을클릭하면자동으로코드가추가됨 36
startactivityforresult() 의사용예 추가된메소드 ( 여기에필요한소스를추가하면됨, setresult 메소드실행시자동으로호출되는 callback 함수 ) 소스추가 requestcode 값확인 ( 어디서전달한 Intent 의엑티비티가 setresult 함수를호출했는지구분됨 ) resultcode 값확인보통 RESULT_OK 또는 RESULT_CANCLE 값을사용 Intent 에전달된값을화면에띄어줌 37
startactivityforresult() 의사용예 버튼클릭 돌아가는버튼클릭 (Intent 에값저장하여전달 ) ResultCode 와 intent 에저장한값을 Toast 를사용하여출력 38
질문 QnA 39