상세 컨텐츠

본문 제목

Intent

Android(강의정리)

by 낙지지 2020. 11. 17. 13:32

본문

03. Intent
- 의도, 요구, 의사 전달, 요청


- Intent 사용처
 - ActivityActivity
 - Android System과 내 App (전화, , , )
 - 다른 App과 내 App -> 무작정 사용할 수 없다, 상호합의가 있어야 한다.

- 요청의 종류
 - 전달만 하는 요청
 - 리턴을 받는 요청

- 인텐트의 종류
 - 명시적 인텐트 -> 정확히 대상에게 요청
 - 암시적 인텐트 -> 할수 있는 대상에 요청

 

 

- 명시적 인텐트(Intent1 Activity -> Intent2 Activity) + 전달만 하는 요청

            // 명시적 인텐트
            val intent2 = Intent(this@Intent1,Intent2::class.java)
            // Apply -> 묶음?
            intent2.apply {
                this.putExtra("number1", 1)
                this.putExtra("number2", 2)
            }
            // - 요청의 종류
            //      - 전달만 하는 요청
            startActivity(intent2)

- 같은 방법 이지만 코틀린의 apply를 이용해서 가독성을 높이는 방법

            // 명시적 인텐트
            val intent2 = Intent(this@Intent1,Intent2::class.java)
            // Apply -> 묶음?
            intent2.apply {
                this.putExtra("number1", 1)
                this.putExtra("number2", 2)
            }
            // - 요청의 종류
            //      - 전달만 하는 요청
            startActivity(intent2)

- 리턴을 받는 요청

  • Intent1
            // 명시적 인텐트
            val intent2 = Intent(this@Intent1,Intent2::class.java)
            // Apply -> 묶음?
            intent2.apply {
                this.putExtra("number1", 1)
                this.putExtra("number2", 2)
            }
            // - 요청의 종류
            //      - 전달만 하는 요청
            //startActivity(intent2)
            //      - 리턴을 받는 요청
            startActivityForResult(intent2, 200)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if(requestCode == 200){
            Log.d("number", ""+requestCode)
            Log.d("number", ""+resultCode)
            val result = data?.getIntExtra("result",0)
            Log.d("number", ""+result)
        }
        super.onActivityResult(requestCode, resultCode, data)
    }
  • Intent2
//리턴하기(startActivityForResult(intent2=..., 200)에 대한)
val result = number1 + number2
val resultIntent = Intent()
resultIntent.putExtra("result", result)
setResult(Activity.RESULT_OK, resultIntent)

 

- 암시적 인텐트

val intent3 = Intent(Intent.ACTION_VIEW, Uri.parse("http://m.naver.com"))
startActivity(intent3)

 

- 전체 코드(Intent1)

package com.example.myapplication

import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_intent.*
import kotlinx.android.synthetic.main.activity_intent2.*

class Intent1 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_intent)

        change_activity.setOnClickListener {
//            //this@Intent1에서 @Intent1은 생략해도됨 this가 Intent1을 가르키기 때문.
//            //하지만 오류가 나는 경우도 있기 때문에, @뒷부분을 끝까지 써주는게 좋음.
//            // 명시적 인텐트
//            val intent = Intent(this@Intent1,Intent2::class.java)
//
//            // Key, Value 방식 -> Key와 Value를 쌍으로 만들어 저장한다. -> Dictionary
//            intent.putExtra("number1", 1)
//            intent.putExtra("number2", 2)
//            startActivity(intent);

//            // 명시적 인텐트
//            val intent2 = Intent(this@Intent1,Intent2::class.java)
//            // Apply -> 묶음?
//            intent2.apply {
//                this.putExtra("number1", 1)
//                this.putExtra("number2", 2)
//            }
//            // - 요청의 종류
//            //      - 전달만 하는 요청
//            //startActivity(intent2)
//            //      - 리턴을 받는 요청
//            startActivityForResult(intent2, 200)

            // 암시적 인텐트
            val intent = Intent(Intent.ACTION_VIEW, Uri.parse("http://m.naver.com"))
            startActivity(intent)
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if(requestCode == 200){
            Log.d("number", ""+requestCode)
            Log.d("number", ""+resultCode)
            val result = data?.getIntExtra("result",0)
            Log.d("number", ""+result)
        }
        super.onActivityResult(requestCode, resultCode, data)
    }
}

-전체코드(Intent2)

package com.example.myapplication

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_intent2.*

class Intent2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_intent2)

        result.setOnClickListener {
            //값을 받기
            val number1 = intent.getIntExtra("number1",0)
            val number2 = intent.getIntExtra("number2",0)

            Log.d("number", ""+number1)
            Log.d("number", ""+number2)

            //리턴하기(startActivityForResult(intent2=..., 200)에 대한)
            val result = number1 + number2
            val resultIntent = Intent()
            resultIntent.putExtra("result", result)
            setResult(Activity.RESULT_OK, resultIntent)

            finish()// Activity 종료

            // Stack
            // Intent2   ->종료
            // Intent1          Intent1
        }
    }
}

 

'Android(강의정리)' 카테고리의 다른 글

Context  (0) 2020.11.18
NullSafety, lateinit  (0) 2020.11.18
Fragment  (0) 2020.11.18
수명주기, view -> activity, 익명함수  (0) 2020.11.16
layout  (0) 2020.11.13

관련글 더보기

댓글 영역