티스토리 뷰

IT study/android

Intents

까자미가 카카로트냐 2018. 3. 16. 11:44

스크린사이로 네비게이팅 하는 법

현재 앱내에 다른 앱들로부터의 activities 를 사용하는 법


activity가 직접적으로 다른 것들을 콜하는 것이 아니라 android는 intents 라 부르는 메세징오브젝트들을 이용해서 소통을 한다.


intents 는 action이 발생하는 앱에 요청을 놓는다. 새로운 activity를 시작하는 것에서 부터 사진을 선택한다던지 또는 디스플레이한다던지, 폰콜은 한다던지. 


클래스 이름을 직접 호출해서 실행시키는 거 대신 intents 를 사용하는 이유는 뭘까 

편지봉투를 예를 들어 설명할 수 있다. 편지봉투에는 누구에게 보낼 것인지, 여기서는, 배달하고자하는 컴포넌트가 무엇인지. 배달되어지고자하는 데이타의 양이 적은 공간이라고 해도 .  primitive topples되어지는 엑스트라로써 패키지되어진다던지, 이들 모든 어플리케이션 컴포넌트에 의해 읽혀질수있고, 어플리케이션 컴포넌트는 궁극적으로 intents를 받고 열수있다. 


이런 은유법을 사용해서, 명백한 intent는 타켓 컴포넌트의 이름을 사용한다. 


explicit intent 를 사용해서 하나에서는 쓰고, 다른데서는 읽도록 정보를 전송할 수 있다.



ChildActivity가 AndroidManifest.xml에서 editing 되어지므로써 launch시 메인activity가 아니라 ChildActivity가 로드되어진다. 이는 intent filter 를 옮김으로써 가능해진다. 


메인 activity와 새롭게 생성된 child activity사이의 링크를 setup 하자.

two activities 사이에 move하기 위해서 activity를 start하는 intent 를 파라미터로 가지는 메소드를 호출한다. 

intent는 보내고자하는 activity에 정보의 bits를 패키지해서 보낼 수 있다. 


MainActivity --------------------------------> ChildActivity

                                 startActivity(Intent)



context는 앱 전체에 영향을 미치거나 하나의 activity의 lifelime 에 더 오래 지속되게 할지도 모른다. 모든 activity는 context를 확장해서 MainActivity.this를 컨텍스트로의 static reference를 구하기 위해 사용할 수 있다.static reference를ChildActivity.class를 사용해서 destination class에서 얻는다 


Context context = MainActivity.this;

// TODO (1) Store ChildActivity.class in a Class object called destinationActivity
Class destinationActivity = ChildActivity.class;
// TODO (2) Create an Intent to start ChildActivity
Intent intent = new Intent(context, ChildActivity.class);
// TODO (3) Replace the Toast with code to start ChildActivity
//String message = "Button clicked!\nTODO: Start a new Activity and pass some data.";
//Toast.makeText(context, message, Toast.LENGTH_LONG).show();
startActivity(intent);

Intent.EXTRA_TEXT

A constant CharSequence that is associated with the Intent, used with ACTION_SEND to supply the literal data to be sent


Implicit Intent

- 만약 이미지나 연락처를 얻으려하거나, 통화하거나, implicit intents는 액션이 다 수행되는 걸 가르키고, 실행하도록 선택적인 약간의 데이타 비트를 가르킨다. 예로, 연락처 content provider 로부터의 연락처를 뽑는다던지, 번호를 다이얼링한다던지,

우리는 .정말 어플리이케이션이 요청을 충족시키는지 알 필요가 있다


만약 앱을 시도할려는데 당신의 앱에서 이용가능하지 않는다면 

예로, 모두다 카메라 requests로 Open Camera 를 실행시키기 원하는데, full camera app 대신으로. 

그리고 만약 내 폰에 하나의 앱이 있고 이게 특정 intent request 충족시킬수있다면, 자동실행가능하다. 그게 아니면, 안드로이드 os 가 여러앱들을 띄우고 선택하라고 한다. 



implicit intents는 action 과 데이타를 포함한다. 


* Common Intents


브라우저에 따라 8000 characters to over 190,000characters 


https://archive.org/web


archive.org -- host


geo:0,0?q=Montreal, Canada

which is the query ?? -- Montreal,Canada


* Share Intents 

엑티비티 만들기전에, 어디로 데이타를 보낼 것인지, 무슨 데이타 타입인지, 파일수는 몇개를 보낼 것인지 등 생각해 볼 필요가 있다. 

ShareCompat class - inner class IntentBuilder abstract

필요한 또는 버릴 bits 들을 체인시킨다. 


* 미디어타입이란 ? 

인터넷으로 전송되어질 수 있는 모든 타입의 content는 2부분으로 나누고 설명되어지는 데 이를 미디어타입이라 부른다. 또는 MIME (Multipurpose Internet Mail Extension) 타입이라 부른다. 

미디어타입은 다른 타입의 첨부파일을 가질 수 있는 multi-part emails들을 가지게 해준다

Media Type String

type/subtype/optional parameters 로 구성된다. 

예를 들어,

text/html; charset=UTF-8


데이타공유를 할때는 미디어타입을 반드시 명시해야된다. 

안드로이드는 어떻게 요청을 처리할지를 결정하게 된다. 


Implicit intent 

- opening a web link : 구체적인 브라우저를 사용할거라 명시하지 않고 유저가 선택하는 것이므로

- opening an activity : 이는 explicit intent 를 사용해서 어디로 갈것인지 정확히 명시함. 

- sharing content to Twitter : implicit intent 를 사용하는 것을 권고한다. 











'IT study > android' 카테고리의 다른 글

coursera - introduction to the android platform  (0) 2018.03.27
Preference  (0) 2018.03.18
Lifecycle  (0) 2018.03.17
Content Provider  (0) 2018.03.15
Recycler view and adapters  (0) 2018.03.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함