본문 바로가기
프로그래밍/안드로이드

안드로이드 인텐트(intent)

by -현's- 2015. 3. 10.
반응형



●인텐트(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);

}

}

}

 









반응형

댓글