Intent? 안드로이드 기기에 설치되어 있는 다른 앱에 푸쉬를 보낼 때 사용
public void onClick(View v){
Intent intent = new Intent(getApplicationContext(),SecondActivity.class);
startActivity(intent);
}
새로운 인텐트 객체를 생성하고, 다른 클래스를 파라미터로 넘긴다.
startActivity()안에 넣어주면 인텐트 객체인 새로운 화면인 SecondActivity가 실행된다.
인텐트 객체에 데이터를 넣어서 전달한다.
startActivity()는 새로운 액티비티에서 응답이 없을 때 사용한다.
startActivityForResult()의 경우에는 새로 띄운 액티비티로 받는 응답을 처리할 경우에 사용한다.
Example)
public void onClick_01(View v)
{
Intent intent = new Intent (this, MainActivity.class);
startActivity(intent);
}
public void onClick_02(View v)
{
Intent intent = new Intent (this, Main2Activity.class);
startActivity(intent);
}
이런식으로 다른 클래스로 이동이 된다. 그런데 문제점은 계속 위에 쌓는다는 것이다.
page1에서 page2를 오픈하고 뒤로가기로 돌아가면 page1이 나온다. 그렇다면 여러 페이지일 때는…? ->그래서 탭바를 구현해야 한다.
Intent intent= new Intent(Intent.ACTION_VIEW, Uri.parse("http://m.naver.com"));
startActivity(intent);
위와 같은 암시적 인텐트는 액션 + 데이터 속성으로 구성되어있다.
이 두가지 속성 말고도 Category,Type,Component,Extras 라는 속성을 가진다.
Component라는 속성을 지정할 경우, 컴포넌트 클래스 이름을 명시적으로 지정하는데, 이 경우가 명시적 인텐트이다.
즉 암시적 인텐트는 Component를 제외한 나머지 속성들로 구성되며, 이 속성들에 부합하는 컴포넌트가 실행된다.
암시적 인텐트는 그 속성에 부합하는 컴포넌트가 여러개 있을 때 선택하게 해준다 -> 해당 사이트를 인터넷 / 네이버 앱/ 크롬 중 하나로 열기 선택 화면 뜸
인텐트 종류?
명시적 인텐트 : 어떤 컴포넌트를 호출해야 할지 호출 대상 컴포넌트 이름이 명시되어 있음
암시적 인텐트 : 호출 대상 컴포넌트의 특성만 나열되어 있음
액션? 호출대상 컴포넌트가 해줬으면 하는 일
데이터? 호출대상 엑티비티가 처리해줬으면 하는 데이터의 주소(전화번호, 웹 주소, 데이터 주소)
Intent intent= new Intent();
intent.setType(“vnd.android.cursor.item/phone”);
위 코드와 같이 인텐트 객체에 type속성을 추가 한다.
즉 데이터의 종류를 추가하여 인텐트 해석에 있어서 정확하게 대상 컴포넌트를 찾게 해준다.
----
4. 혹시 전달할 것 있니? - extra
Extra는 인텐트 객체에 실제로 데이터를 첨부하여 보내는 것을 의미합니다. 이 데이터들은 키-값 쌍을 이루어 인텐트 객체에 저장되며, putExtra() 메소드를 통해 인텐트 객체에 데이터를 집어넣고, getInt(), getFloat(), getString() 과 같은 메소드로 해당 타입으로 저장된 추가 데이터들을 불러올 수 있습니다.
Intent i = new Intent();
i.putExtra("TEST", "Test string"); // String을 넣습니다.
// 인텐트를 받은 다른 컴포넌트가 Extras 데이터를 받아옵니다.
String str = getIntent().getExtras().getString("TEST");
인텐트 호출방법
원리
public Intent(Context packageContext, Class<?>cls)
* packageContext :
한마디로 말하면 호출하는 액티비티를 뜻합니다. Ex) Activity1 (Activity1.this)
*cls :
호출할 클래스를 뜻합니다. 여기에서는 Activity2 액티비티를 호출해야하므로, Activity2의 클래스인 Activity2.class를 입력합니다.
public void startActivity(Intent intent)
파라미터로 받은 intent 인텐트를 실행합니다.
액티비티 종료
public void finish()
액티비티를 종료합니다.
액티비티간 데이터를 주고받기
단순히 액티비티를 호출하는 것이 아닌 데이터를 주고 받을 때도 인텐트를 사용한다.
인텐트 필터란?
인텐트 필터?
인텐트 해석 : 가장 적절한 컴포넌트를 찾는 과정
인텐트 필터: 인텐트 객체의 정보와 각 컴포넌트의 정보를 비교하면서, 각 컴포넌트는 자신이 받을 수 있는 인텐트 종류를 manifest파일에 정의한다. 이과정을 인텐트 필터라고 한다.
CATEGORY_ALTERNATIVE : 사용자가 어떠한 데이터를 보고있을 때(사진을 보고 있을 때) 현재 작업이나 현재 컴포넌트외에 동일한 작업을 처리할 수 있는 다른 컴포넌트를 찾을 때 사용한다.
CATEGORY_SELECTED_ALTERNATIVE: 데이터 목록에서 특정 데이터를 선택한 상태에서 해당 데이터를 처리할 수 있는 다른 컴포넌트를 찾을 때 사용한다.
'OLD개발이야기 > Android Studio' 카테고리의 다른 글
안드로이드 스튜디오 뷰 View (0) | 2018.02.16 |
---|---|
안드로이드 기본 레이아웃 설정 (0) | 2018.02.16 |
안드로이드 스튜디오 Linear Layout (0) | 2018.02.16 |
안드로이드 푸시 알람 ( 서버 x) (0) | 2017.10.31 |
Android Studio AR (0) | 2017.10.05 |