●인텐트(Intent)
- 하나의 앱을 구성하는 여러 액티비티간 데이터를 주고 받고 대상에게 무엇을 하려는지에 대한 '의도'를 전달할 목적으로 사용되는 객체이다.
- 인텐트 사용시 대상 액티비티를 정확히 명시하여 사용할 수 있는 인텐트를 명시적(explicit)인텐트라고 하고 대상을 정확히 명시하지 않고 사용하는 액티비티를 암시적(implicit)라고 한다.
- 명시적 인텐트는 앱내에서 내가 만든 액티비티를 호출할때 이용하고, 암시적 인텐트는 다른 앱을 호출할때 Action상수를 이용해서 호출한다.
●명시적 액티비티 예제
- A액티비티에서 B액티비티로 화면 이동하고 텍스트를 전달하는 예제
- a.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<Button android:id="@+id/btn_open" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="다른 화면으로 이동"/> <EditText android:id="@+id/et_msg" android:layout_width="300dp" android:layout_height="35dp" android:background="#ffdd00" /> </LinearLayout> |
- ActivityA.java
package study; import com.example.day0307.R; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class ActivityA extends Activity implements OnClickListener{
EditText et_msg;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.a);
Button btn_open = (Button)findViewById(R.id.btn_open); et_msg = (EditText)findViewById(R.id.et_msg);
btn_open.setOnClickListener(this); }
@Override public void onClick(View v) { //다른 액티비티를 호출할때 정확한 액티비티 클래스 이름까지 명시해야한다. //이때 사용되는 객체가 Intent인데, Intent 사용시 특정 액티비티 클래스명으 명시적으로 //호출하는 방법을 가르켜 명시적 Intent라 한다. //호출대상이 되는 클래스는 동적으로 지정할 수 있다. Intent intent =new Intent(this, ActivityB.class);
//인텐트는 액티비티 호출할때만 사용하는 것이 아니라, 데이터 전달용도로도 사용가능하다. intent.putExtra("msg", et_msg.getText().toString()); startActivity(intent);//다른 액티비티를 호출하는 매서드 }
} |
- b.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<Button android:id="@+id/btn_close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="닫기"/>
<TextView android:id="@+id/tv_msg" android:layout_width="match_parent" android:layout_height="40dp" android:background="#aaaaaa"/> </LinearLayout> |
- ActivityB.java
package study; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import com.example.day0307.R; public class ActivityB extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.b);
Button btn_close = (Button)findViewById(R.id.btn_close); btn_close.setOnClickListener(this);
//intent를 통해 넘겨준 데이터가 있다면, 그 데이터를 추출해서 화면에 보여준다. //새롭게 메모리에 올린게 아니라 A에서 넘어온 intent이다. Intent intent = this.getIntent(); String msg = intent.getStringExtra("msg");
TextView tv_msg = (TextView)findViewById(R.id.tv_msg); tv_msg.setText(msg); } @Override public void onClick(View v) { this.finish(); //this는 생략 가능하다. }
} |
●암시적 인텐트
- 암시적 인텐트는 호출 대상이 정확하지 않아 호출자의 의도를 파악하려면 정보가 필요하다. 이때 사용되는 상수가 Action이다.
- Action상수는 안드로이드 시스템내에 정의되어있다.
- Action상수는 안드로이드 개발자 사이트에서 Intent를 정의한 API에서 찾으면 된다.
- call.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<Button android:id="@+id/btn_call" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="전화걸기"/> </LinearLayout>
|
- CallActivity.java
package study; import com.example.day0307.R; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class CallActivity extends Activity implements OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState);
setContentView(R.layout.call); Button btn_call = (Button)findViewById(R.id.btn_call);
btn_call.setOnClickListener(this);
} @Override public void onClick(View v) { int id = v.getId();
if(id==R.id.btn_call){ //정확한 액티비티명을 명시하지 못할대 가장 어울리는 의도를 Action상수를 통해 보여햐한다. //그러면 안드로이드가 알아서 분석해서 알맞는 앱을 띄워준다. Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:01012341234")); startActivity(intent); } }
}
|
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 리스트뷰1 (ListView) (0) | 2015.03.17 |
---|---|
안드로이드 스피너(spinner) (0) | 2015.03.17 |
안드로이드 버튼 클릭, 이미지 변경 (0) | 2015.03.10 |
안드로이드 버튼 클릭, 화면 이동 (0) | 2015.03.06 |
안드로이드 에러 View requires API level 14 (current min is 10): <GridLayout> (1) | 2015.03.05 |
댓글