달력

12

« 2019/12 »

  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  

안드로이드 프로그램 구조

   

   

뷰(View)

뷰(View)는 사용자와 직접 상호작용을 하는 UI를 의미합니다.

   

 

액티비티 (Activity)

  • 하나의 화면을 컨트롤하는 객체로 (어플리케이션의 하나의 화면, 폰 화면)
  • 보통 액티비티와 UI화면은 일대일 대응 관계를 갖고 시스템 혹은 사용자로부터 시작된 이벤트에 반응(처리)합니다.
  • 레이아웃을 포함하며 UI오브젝트를 추가하여 사용할 레이아웃을 정의(화면을 구성)하게 됩니다.

   

   

위젯(Widget)

TexTView, Button, EditText등 사용자의 입력을 받거나 화면에 데이터를 표시해 주는 Object

   

   

레이아웃(Layout)

액티비티들을 어떠한 방식으로 화면에 배치해 줄지를 결정해 주는 하나의 컨테이너 역할

UI오브젝트를 담고 있는 그릇역할.

   

 

인텐트 (Intent)

액티비티간의 통신 수단이며 메시지에 대한 상세한 정보를 가집니다. 예를 들어 주소록 목록 액티비티에서 편집 액티비티를 호출할 때 누구의 주소를 어떤 식으로 편집하라는 지시가 인텐트에 실려 전달됩니다.

   

 

서비스 (Service)

서비스는 주로 백그라운드에서 돌아가는 실행코드로, 일단 실행되면 휴대폰이 꺼질 때까지 돌아갑니다. 서비스는 일반적으로 사용자 인터페이스가 없습니다.

예) MP3 플레이어, 저장기능

 

   

브로드캐스트 리시버(BroadcastReceiver)

만약 애플리케이션이 전화가 오거나 문자메시지 수신과 같은 이벤트 반응시 적절하게 반응하기를 원한다면 반드시 브로드캐스트 리시버로서 등록되어 있어야만 합니다. 신호만 대기할 뿐 UI를 따로 가지지는 않으므로 신호가 오면 적절한 액티비티를 띄워 내용을 전달합니다.

   

 

컨텐트 프로바이더 (Content Provider)

다른 응용 프로그램을 위해 자신의 데이터를 제공합니다. 안드로이드는 보안이 엄격하여 다른 응용프로그램의 데이터를 함부로 액세스 하지 못하도록 되어 있습니다. 응용프로그램 간에 데이터를 공유할 수 있는 합법적인 유일한 장치가 바로 콘텐트 프로바이더입니다.

   

   

사용 가능한 구성 요소 

(1) 데이터 보관

(2) 네트워크

(3) 멀티미디어

(4) GPS

(5) 전화서비스

   

Posted by codedragon codedragon

댓글을 달아 주세요

Intent를 통한 화면이동 및 데이터 전달

   

   

강의 내용

activity_main.xml

RelativeLayout 변경

Graphical Layout > Form Widgets-Button추가

Graphical Layout > Text Fields-Plain Text 추가

Graphical Layout > Form Widgets-Button추가

  

second_main.xml

LinearLayout(Vertical) 추가

Graphical Layout > Form Widgets-TextView 추가

AndroidManifest.xml

<activity android:name="SecondActivity"></activity>

MainActivity.java

> 화면 전환 확인

//ID에 해당되는 객체의 참조값 반환

//이벤트 소스와 이벤트 리스너 연결

//이벤트 핸들

>확인

  

SecondActivity.java

//데이터 가져오기

   

activity_main.xml

  

second_main.xml

  

   

   

 

   

출력 결과

   

   

   

   

   

   

Posted by codedragon codedragon

댓글을 달아 주세요

   

인텐트

인텐트란 애플리케이션의 컴포넌트, 구체적으로 말하자면 액티비티, 서비스, 브로드캐스트리시버에게 작업을 요청하기 위해 필요한 데이터를 전달해주는 메시지에 해당하는 '전달 객체'로 보통 '인텐트 객체'라고 합니다.

 

   

인텐트 생성

명시적 인텐트

(Explicit Intent)

호출 대상 컴포넌트의 이름이 명시되어 있는 인텐트 즉, 어떤 것을 호출해야 할지 명시되어 있는 인텐트

new Intent(Context packageContext, class cls);

ex) new Intent(this,SampleActivity.class)

암시적 인텐트

(Implicit Intent)

호출 대상 컴포넌트가 정확히 정해진 것이 아니라, 호출 대상 컴포넌트의 특성만 나열되어 있는 인텐트

new Intent(String action, Uri uri);

ex)

Uri tel=Uri.parse("tel:01056781234");

new Intent(Intent.ACTION_DIAL,tel);



 

인텐트 호출

startActivity()

startActivity(new Intent(Intent.Action_DIAL,tel));

startActivityForResult()

//호출

private Static final int PICK_REQUEST=1337;

....

String str=Uri.parse(type.getText().toString());

Intent intent=new Intent(Intent.ACTION_PICK,str);

startActivityForResult(intent,PICK_REQUEST);

 

//실행된 액티비티가 종료되면 onActivityResult() 메소드가 호출

protected void onActivityResult(int requestCode,int resultCode,Intent data){

if(requestCode==PICK_REQUEST){

if(resultCode==RESULT_OK){

startActivity(new Intent(Intent.ACTION_VIEW,data.getData()));

}

}

}

   

 

인텐트로 데이터 전달

인텐트로 호출할 액티비티에 전송할 데이터 셋팅

 

Intent intent=new Intent(this,IntentCallee.class);

intent.putExtra("name","전송할 문자열"); <- 전송할 문자열 셋팅

startActivity(intent);

 

실행된 액티비티에서 인테트를 호출한 후 문자열 추출

 

Intent intent=getIntent();

String name=intent.getExtras().getName("name").toString(); ß 전송된 문자열 추출

 

   

인텐트의 구성 요소

 

인텐트의 종류와 구성 요소

명시적 인텐트

암시적 인텐트

컴포넌트 이름

액션(Action)

 

카테고리(Category)

  

데이터(Data)

  

데이터 타입(MIME Type)

  

엑스트라(Extras)

   

 

컴포넌트 이름

애플리케이션 내 클래스 이름 또는 애플리케이션의 AndroidManifest.xml 파일에서 설정된 패키지 이름과 클래스 이름의 조합입니다.

 

컨포넌트 이름은 setComponent(), setClass(), 또는 setClassName() 메서드에 의해 설정되고 getComponent()에 의해 읽혀지게 됩니다.

   

   

Action(행동)

인텐트 액션은 수행되어야 하는 작업 내용으로 인텐트 액티비티 액션과 브로드캐스트 액션으로 나뉩니다.

액티비티 액션

액티비티를 호출하겠다는 액션

브로드캐스트 액션

브로드캐스트리시버를 호출하겠다는 액션

   

액티비티 액션

액션 상수

설명

ACTION_MAIN

시작하는 액티비티를 지정합니다.

ACTION_VIEW

인텐트에 첨부되는 데이터의 URI가 가리키는 데이터를 사용자에게 보여주라는 액션입니다.

ACTION_EDIT

인텐트에 첨부되는 데이터의 URI가 가리키는 데이터를 변경하라는 액션입니다.

ACTION_DELETE

인텐트에 첨부되는 데이터의 URI가 가리키는 데이터를 삭제하라는 액션입니다.

ACTION_DEFAULT

ACTION_VIEW와 동일합니다.

ACTION_PICK

데이터에서 하나(URI)를 선택하여 정보를 반환하라는 액션입니다.

ACTION_GET_CONTENT

데이터에서 하나의 컨텐트를 선택하여 반환하라는 액션으로 액티비티에 의하여 신규 작성한 데이터를 반환하는 것도 가능합니다.

ACTION_RUN

데이터를 실행시키는 액션입니다.

ACTION_INSERT

빈 아이템을 작성하라는 액션입니다.

ACTION_CALL

전화 연결을 요청하는 액션입니다.

실제로 전달된 전화 번호로 전화를 겁니다.

ACTION_DIAL

전화 연결을 요청하는 액션입니다.

전화 다이얼패드 화면으로 이동합니다.

ACTION_SENDTO

데이터의 메시지를 보내라는 액션입니다.

ACTION_ANSWER

전화 착신에 관한 액션입니다.

ACTION_SYNC

데이터와 서버의 데이터를 동기화하라는 액션입니다.

 

인텐트 객체의 액션을 설정하는 메서드로 setAction()에 의해 설정될 수 있으며, getAction()메서드에 의해서 읽게 된다.

 

브로드캐스트 액션

브로드캐스트 액션 상수

설명

ACTION_BATTERY_CHANGED

배터리 잔량의 변화를 알림

ACTION_BATTERY_LOW

배터리 부족 경고

ACTION_BOOT_COMPLETED

시스템 부팅 완료 알림

ACTION_DATE_CHANGE

날짜 변경 알림

ACTION_HEADSET_PLUG

헤드셋이 디바이스에 연결되었거나 또는 분리되었다는 것을 알림

ACTION_PACKAGE_ADDED

애플리케이션 패키지 추가 시 알림

ACTION_PACKAGE_REMOVED

애플리케이션 패키지 제거 시 알림

ACTION_SCREEN_ON

스크린이 켜졌음을 알림

ACTION_TIMEZONE_CHANGED

타임존 변경 시 알림

ACTION_TIME_CHANGED

시간 지정 시 알림

ACTION_TIME_TICK

매시간 변경 시 알림

   

 

Category(분류)

인텐트를 수신하여야 할 컴포넌트의 종류에 대한 정보를 포함하는 문자열을 정의합니다. 주로 수신받을 액티비티와 관련되어 안드로이드에서 몇 가지의 카테고리 상수를 제공하고 있습니다.

 

카테코리 상수

설명

CATEGORY_BROWSABLE

타켓 액티비티는 링크에 의해 참조되는 데이터(예를 들어 이미지나 이메일 메시지)를 보여주기 위해 브라우저가 호출 되어야 합니다.

CATEGORY_HOME

디바이스가 켜질 때, HOME 키가 눌렸을 때 사용자가 보게되는 첫 번째 화면인 액티비티의 홈 화면을 보여주는 액티비티가 되어야 합니다..

CATEGORY_LAUNCHER

액티비티는 하나의 태스크에서 최초로 생성된 액티비티가 되며, 최상위 계층의 애플리케이션으로 시작됩니다.

CATEGORY_PREFERENCE

타깃 액티비티는 설정 프레퍼런스입니다.

 

   

Data(데이터)

Data는 호출 대상 액티비티가 처리해 주었으면 하는 데이터 "주소"입니다.(실제 데이터가 아닙니다)

이러한 주소는 URI(Uniform Resource Identifier) 형식으로 정의되어 있으며, 전화번호, 웹 주소 등 다양한 형태가 있습니다.

 

예) 액션이 'ACTION_DIAL'이라면, 데이터 필드는 통화해야 할 전화번호를 가진 'tel:URI'을 가져야 합니다.

   

 

MIME Type(종류)

  • 인텐트 객체 내의 데이터는 데이터의 "주소"만을 나타낼 뿐, 주소 자체에서 해당 URI가 가리키는 데이터의 종류가 어떤 것인지는 알 수가 없습니다.
  • 실제 데이터의 종류가 음악이 될 수도 있고, 영상이 될 수도 있고, 연락처, 메모 등 어떤 것이든 될 수 있습니다. 즉, Type은 데이터의 "종류"를 지정하여 인텐트 해석 과정에서 정확하게 대상 컨포넌트를 찾을 수 있도록 해 줍니다.

 

   

Extra(추가 정보)

인텐트는 엑스트라(Extras)에 필요한 값을 입력하면 안드로이드는 엑스트라 값을 번들(bundle) 객체로 바꿉니다. 위에서 만들어진 번들 객체는 인텐트를 사용하여 애플리케이션 컴포넌트를 호출할 때 해당 컴포넌트에 전달됩니다.

 

   

플래그

다양한 종류의 플래그(Flags)는 대부분 안드로이드 시스템에게 액티비티를 시작시키는 방법과 시작 이후 액티비디를 다루는 방법을 알려줍니다.

 

Intent i = new Intent(this, Test.class);

i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(i);

   

플래그

설명

FLAG_ACTIVITY_CLEAR_TOP

실행할 액티비티가 태스크에 이미 있다면 태스크에 있는 동일한 액티비티부터 최상단의 액티비티까지 모두 제거하고 새로운 액티비티를 실행하는 플래그입니다.

그래서 태스크 스택에 A, B, C, D가 있을 때, 이 플래그를 지정해서 B를 호출하면 B, C, D가 모두 스택에서 제거됩니다.

그리고 새로운 B 액티비티가 스택에 추가됩니다.

FLAG_ACTIVITY_SINGLE_TOP

실행할 액티비티가 태스크 스택 최상단에 이미 있다면 액티비티를 다시 실행하지 않는 플래그입니다. 다시 실행하지 않는다는 것은 태스크에 존재하는 액티비티를 재사용한다는 것을 의미합니다. 재사용한다는 것은 액티비의 많은 리소스와 사용자가 입력했던 데이터들을 그대로 유지할 수 있다는 것을 의미합니다

FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

사용자가 홈 스크린이나 "최근 실행 액티비티 목록"에서 태스크를 시작할 경우 시스템이 설정하는 플래그입니다.

이 플래그는 새로 태스크를 시작하거나 백그라운드 태스크를 포그라운드로 가지고 오는 경우가 아니라면 영향을 주지 않습니다.

"최근 실행 액티비티 목록" 홈 키를 오랫동안 눌렀을 때 보여지는 액티비티 목록입니다.

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

태스크를 재시작할 때 액티비티를 종료할 수 있도록 액티비티에 표시를 하는 플래그입니다.

이 플래그에 의해 표시된 액티비티들은 태스크가 백그라운드에 있다가 포그라운드(전면)에 보이게 될 때 태스크 스택에서 제거됩니다. 단, 해당 태스크는 FLAG_ACTIVITY_RESET_TASK_IF_NEEDED 플래그가 설정되어 있어야 합니다.

FLAG_ACTIVITY_NEW_TASK

실행한 액티비티와 관련된 태스크가 존재하면 동일한 태스크 내에서 실행하고, 그렇지 않으면 새로운 태스크에서 액티비티를 실행하는 플래그입니다.

FLAG_ACTIVITY_MULTIPLE_TASK

액티비티를 항상 새로운 태스크에서 실행하는 프래그이며, FLAG_ACTIVITY_NEW_TASK와 함께 사용해야 동작합니다.

FLAG_ACTIVITY_CLEAR_TASK

태스크를 초기화하는 플래그입니다.

액티비티가 이 플래그와 함께 호출되면 태스크에 존재하던 다른 액티비티는 모두 종료됩니다. 이 플래그는 반드시 FLAG_ACTIVITY_NEW_TASK 플래그와 함께 사용되어야 합니다.

FLAG_ACTIVITY_FORWARD_RESULT

액티비티 처리 결과를 전달할 수 있는 플래그입니다.

액티비티에서 다른 액티비티를 호출해서 결과 값을 받고 싶을 때 사용하는 것이 startActivityForResult(), setResult(), onActivityResult()메서드입니다.

FLAG_ACTIVITY_NO_HISTORY

실행한 액티비티를 태스크 스택에서 관리하지 않도록 해주는 플래그입니다.

FLAG_ACTIVITY_REORDER_TO_FRONT

실행한 액티비티가 태스크에 이미 존재하는 액티비티라면 새로 실행하지 않고 태스크에 있는 액티비티를 스택 최상단으로 옮기는 플래그입니다.

FLAG_ACTIVITY_NO_ANIMATION

액티비티 전환 시 애니메이션을 사용하지 않게 하는 플래그입니다.

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

"최근 실행 액티비티 목록"에 보이지 않도록 하는 플래그입니다." 최근 실행 익티비티 목록"은 홈 키를 오랫동안 눌렀을 때 보여지는 액티비티 목록입니다.

FLAG_ACIVITY_BROUGHT_TO_FRONT

태스크 스택에 있는 액티비티가 다시 실행되었을 때 시스템이 설정하는 플래그입니다.

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

액티비티가 "최근 실행 액티비티 목록"에서 실행될 경우 시스템이 설정하는 플래그입니다.

 

Posted by codedragon codedragon

댓글을 달아 주세요