자바 어플 개발/안드로이도 스튜디오 개념

Intent

appmaster 2019. 7. 22. 11:49

어플리케이션 구성요소간에 작업 수행을 위한 정보 전달을 하는 역할

 

 

 

 

Intent 종류

명시적 Intent 암시적 Intent
작업을 수행 하길 원하는 컴포넌트를 정확히 지목 해당 작업을 할 수 있는 컴포넌트 전부에게 전달

Intent intent = new Intent(this, NextActivity);

startActivity(intent);

Intent intent = new Intent(package.name.NextActivity);

startActivity(intent);

 

개발할때는 안정성을 추구하기 때문에 반드시 편처럼 intent를 만들어서 화면을 전환해야한다.

 

암시적인것은 공유버튼을 눌렀을때 특정 어플리케이션을 여는것이 아니라 공유기능을 수행할수있는 소셜 어플리케이션을 여러개가 목록처럼 올라오는 것을 볼 수 있다. 이게 암시적인 intent를 사용했을때 나오는 현상이다. 즉 공유할수있는 기능을 가진 모든 어플리케이션을 사용자가 선택할 수 있게 된다.

 

 

Intent 사용 종류

WebView

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http:www.naver.com"));

startActivity(intent);

Call

Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel : 01012345678"));

startActivity(intent);

첫번째 예를 보면 intent를 생성할때 첫번째 매개변수를 action-view로 하고 두번째 매개변수에 웹주소를 넣고 스타트 액티비티로 intent를 실행시키면 핸드폰에 깔려있는 웹브라우저들이 선택리스트처럼 올라오게 되고 그것을 하나 클릭했을때, intent에 넣어두었던 저 웹주소가 열리게 된다.

 

두번째 예는 전화 예인데, 첫번째 매개변수를 action-call로 하고 두번째 매개변수로는 전화번호를 넣고 start_activity를 하게 된다면 핸드폰에 전화걸수있는앱이 여러개라면 그 앱들이 전부 뜨게 되고 사용자가 선택을하게 되면 전화를 걸게 된다. 하지만 핸드폰안에 전화를 걸수있는 앱이 하나만 있다면 선택하는 창은 뜨지않고 바로 그앱이 실행이 된다.

 

 

 

 

인텐트필터

fast campus사진 자료를 들고 왔음

 

인텐트는 어플리케이션안에서 무작위로 발생시키고 실행시킬 수 있다. 하지만 인텐트 필터를 통해서 무작위로 발생시키는 모든 인텐트들을 실행 시킬 필요없이 걸러낸다. 내가 원하지않는 인텐트나 실행시킬 필요가 없는 인텐트가 있기 때문이다. 인텐트필터를 통해서 내가 원하는 인텐트만 받아서 원하는 작업을 할 수 있다.

 

 

 

 

Intent data 전달

Intent data를 넣는 방법 Intent에서 data를 꺼내는 방법

Intent intent = new Intent(this, NextActivity);

Intent.putExtra(KEY, VALUE);

Intent intent = get.Intent();

String data = Intent.getString(KEY);

왼쪽에서는 intent를 생성하고 데이터를 넣는다.

오른쪽에서는 intent를 new를 통해서 생성하는것이 아니라 get을 이용해서 생성한다. 이렇게 생성된 데이터는 get을 통해서 꺼낼수 있는데, 내가 받은 intent 데이터 타입에 따라서 string, int, boolean등 데이터 타입에 맞게 꺼내서 사용 할 수 있다.

 

 

 

Intent의 결과값 받기

- Intent로 새로 생성된 activity로부터 응답 받기

A

Intent intent = new Intent(this, nextActivity);

startActivityForResult(intent, REQUEST_CODE);

B

Intent intent = new Intent();

intent.putExtra(KEY,VALUE);

setResult(RESULT_CODE, intent);

A

@Override

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

if(requestCode == REQUEST_CODE) {

  String result = intent.getString(KEY)

  }

}

A 경우에는 매개변수에 intent만 넣어주는게 아니라 request_code도 넣어주어야 한다.

액티비티B인 경우에는 A가 요청한 작업을 마친 다음에 그 결과 값을 넣어서 보내줄 수 있다. intent를 만들고 intent에 키와 벨류 값을 넣어준다. setResult는 result_code를 넣고 intent도 넣어준다.

마지막 A는 액티비티 B에서 보낸 정보로 결과값을 받는 경우이다. 결과값을 받을 때는 onActivityResult라는 메소드를 오버라이드를 해줘야 한다. 여기서 request코드가 있는 경우는 위에 B의 request코드와 맞는지 제어문을 통해서 확인을 한다. result코드 또한 여기서 확인 할 수도 있다. 

'자바 어플 개발 > 안드로이도 스튜디오 개념' 카테고리의 다른 글

Stack  (0) 2019.07.23
Intent에 데이터를 input하는 방법  (0) 2019.07.22
Activity  (0) 2019.07.22