티스토리 뷰

Intent??


인텐트의 사전적 의미는 의도, 의이지만  사실 이코드가 쓰이는 용도와 좀 연관이 안된다.

각설하고 진짜 뭘하는 애인지 낱낱이 파헤져 보자!!!!


공식 문서-안드로이드 디벨로퍼


Intent는 일종의 메시지 객체입니다. 이것을 사용해 다른 앱 구성 요소로부터 작업을 요청할 수 있습니다. 인텐트가 여러 구성 요소 사이의 통신을 용이하게 하는 데에는 몇 가지 방법이 있지만, 기본적인 사용 사례는 다음과 같은 세 가지입니다.

1. 액티비티 시작.

중략

2. 서비스 시작.

중략

3. 브로드 캐스트 전달.


쉬운 버전 이해

Intent는 택배 수화물 입니다.

액티비티에서 

startActivity라는 차를 배차 받아서 자기몸을 싣고 다른 액티비티로 넘어가는것 일을 합니다. - 화면전환


startService라는 차를 배차 받으면 앱에서 보이는 화면(액티비티)이 아닌 뒤에서 열심히 일꾼들이 일하는 공간(서비스)로 이동을 하죠. 이 때 인텐트는 일꾼들에게 택배같은 산타가 아닌 일거리를 던져주는 상사입니다. 일해라 절해라 시키는 애인 셈이죠.


sendBroadCast라는 차를 배차 받으면 다른 미리 상품을 주문했던 주문자(BroadCast) 들에게 일괄 배송됩니다. 각각의 브로드 캐스트들에게 데이터를 전달합니다.


아래 그림을 보면서 좀더 자세히 알아봅시다!

( 사진 출저 : 직접 제작)

위 그림을 보면 어떻게 사용 하는지 딱 감이 왔을것이다.

우리는 먼저 화면전환을 통한 간단한 intent 예제를 실행해보도록 하겠다.


먼저 간단하게 Edittext하나 Button하나를 만들어주자!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.user1.myapplication.MainActivity">


<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="45dp"
android:hint="보낼 데이터를 적어 주세요" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"/>
</LinearLayout>


레이아웃을 만들었으면 새로운 액티비티를 만들어보자!!!

(사진출저 : 직접제작)

위 화면은 프로젝트 폴더구조 보이는 쪽에 마우스 우클릭 >new >Activity> EmptyActivity 클릭하면 나옵니다.


위와 같이 또하나의 액티비티를 만들어줍니다. 그리고나서 AndroidManifest.xml에 등록을 해줍니다. 왜등록하는지 간단히 설명드리자면 manifest는 은행이고 우리는 거기서 Activity라는 자원을 사용하기위해서 대출을 받아서 사용하는 것입니다. 물론 무이자에 상환도 필요없는 혜자대출. 무튼 등록을 해줍니다!!!!

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.user1.myapplication">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".IntentActivity"></activity>
</application>

</manifest>


위와 같이 어플리케이션 태그안에 MainActivityIntentActivity가 등록되어있습니다. 위에서 우클릭으로 액티비티 만드신분은 자동으로 등록이 되있을겁니다.

준비는 끝!!! 대망의 Intent를 써보도록 하겠습니다.


public class MainActivity extends AppCompatActivity {
EditText editText;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
editText = (EditText) findViewById(R.id.editText);

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data =editText.getText().toString(); //edittext에서 getText() 텍스트를 가져와 toString()스트링형태로 만들어라.
Intent intent = new Intent(MainActivity.this,IntentActivity.class); //메인에서 IntentAcitivy로 가는 송장을 만들어준다.
intent.putExtra("data",data); //위에서 만든 data를 박싱해라!!!
startActivity(intent); //기사님 출발!!!
}
});
}
}

MainActivity 의 코드입니다. Button을 클릭하면 Edittext 우리가 화면상에 적은글을 String으로 가져와 intent를 통해서 IntentActivity에 보내주면서 화면을 전환 시키는 코드 입니다.



다음으로 우리는 택배가 잘왔는지 육안으로 확인을 해야합니다. IntentActivity에서 받은 데이터를 TextView를 통해서 화면에 보여주는 코드를 작성해 보도록 하겠습니다.


activity_intent.xml의 레이아웃을 아래와 같이 세팅해주세요.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.user1.myapplication.IntentActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:layout_centerInParent="true"
android:id="@+id/data"
android:textSize="17dp"/>
</RelativeLayout>



마지막으로 IntentActivity에서 받아온 데이터를 TextView 에 보여주는 java 코드를 작성해보겠습니다.

public class IntentActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent);
String data = getIntent().getStringExtra("data");
textView = (TextView) findViewById(R.id.data);
textView.setText(data);
}
}


우리가 해냈습니다.

우린 답을 찾을거야. 늘 그랬듯이


(사진출저 : 직접제작)


위에 까진 안드로이드를 처음 접해보는 분들이나 비전공자 분들을 위한 intent 강의였습니다.

다음 포스팅은 전공자들이 알아야할 Intent 의 flag,action,intent-filter에 대해서 좀더 세세하게 다뤄보도록 하겠습니다.


 아디오스~!


는 아니고


비전공자 안드로이드 질문방을 운영중입니다. 톡방링크 를 통해 들어오시면 못다 설명드린내용들 자세히 설명드릴게요!!! 

이깟 블로그보다 직접만나서 배워보고 싶으시면 말리지 않습니다. 어서오세요(링크)

마지막으로....제가 만든 앱(링크) 입니다. 리뷰... 하나가 생명을 살립니다. 감사합니다.


꾸벅꾸벅


댓글
  • 프로필사진 우당탕탕 작성자님 질문이 있습니다.
    인텐트를 주기적으로 보내주고 싶은데요 이때 어떻게 해야되는 지 문의드립니다.
    2018.06.15 15:12 신고
  • 프로필사진 Favicon of http://www.feelteller.com Edge_JH 인텐트를 주기적으로 하는 방법은 많습니다만 쓰임새에 따라서 많이 달라질것같아서 하시려는게 어떤건지 말씀해주시면 좀더 자세히 알려드리겠습니다 2018.06.15 22:22 신고
  • 프로필사진 우당탕탕 실시간으로 측정값을 블루투스를 통해서 안드로이드로 받고있는데요
    측정값을 intent.putExtra를 사용해서 다음코드에 있는 str0값을 서브액티비티로 보내줬습니다.
    여기서 데이터가 주기적으로 안들어가는 것 같아서 질문드렸습니다.

    mHandler = new Handler(){ //블루투스 데이터 수신 핸들러
    public void handleMessage(Message msg){
    if(msg.what == MESSAGE_READ){
    try {
    readMessage = new String((byte[]) msg.obj, "UTF-8";);
    if((readMessage.indexOf("s";) == 0) && (readMessage.indexOf("e";) == 21)) {
    if(readMessage != null) { // readmessage와 null(빈값)은 같지 않다
    String str = readMessage;
    test = readMessage.split("";);
    str0 = readMessage.substring(0,22);
    // 모듈에서 넘어오는 데이터에 부호(+,-)값이 포함 되있음
    // indexof에 부호값까지 포함함
    }
    else if(readMessage == null){
    readMessage = str0;

    }

    }
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }

    mReadBuffer.setText(str0);

    if(msg.what == CONNECTING_STATUS){
    if(msg.arg1 == 1)
    mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
    else
    mBluetoothStatus.setText("Connection Failed";);
    }
    }
    };

    //서브액티비티로 화면전환 및 str0 전달
    @Override
    public void onClick(View v) {

    String test0 = str0;
    String ip = "이야이야";
    Intent intent = new Intent(this, UnityPlayerActivity.class);
    intent.putExtra("test",ip);
    intent.putExtra("test1",test0);

    startActivity(intent);
    }
    2018.06.18 10:06 신고
댓글쓰기 폼