안드로이드 스튜디오

안드로이드 스튜디오 Intent(데이터 전송/액티비티 실행)

아는맛이무섭다 2024. 3. 20. 19:20
Intent (비동기식 메시지 객체)

 

 

저는 보통 이 Intent기능을 버튼을 눌러 다른 액티비티로 넘어갈때 가장 많이 사용합니다. Intent를 통해 A activity에 있는 데이터를 B Activity에 전송시킬때도 사용하기도 합니다. 

 

오늘은 이 두가지 유형을 설명해보려고 합니다.

 

  1. 명시적 인텐트
    명시적 인텐트는 앱의 특정 구성요소를 실행할때 사용되는 기능입니다. 보통은 다른 액티비티로 넘어갈 때 자주 쓰입니다. 명시적 인텐트를 사용하려면 Intent객체의 구성요소의 이름을 정의해야합니다. 
    val downloadIntent = Intent(this, DownloadService::class.java).apply {
        data = Uri.parse(fileUrl) //인텐트 정의 이후 이동할 객체요소 지정
    }
    startService(downloadIntent)​/인텐트 시작

    Intent(Context, Class) 생성자는 앱에 콘텍스트 를 제공하고 구성요소에 클래스 객체를 제공합니다. 따라서 이 인텐트는 앱에서 DownloadService 클래스를 명시적으로 시작합니다.

    이렇게 된다면 지정된 객체요소가 바로 실행이 될거고, 서비스를 하기 시작할 것입니다. 따로 시작하라는 명령이 없어도 intent에 지정된 조건만 충족한다면, Intent에 있는 공식이 실행됩니다. 



  2. 암시적 인텐트
    암시적 인텐트는 기기에서 작업을 실행할 수 있는 모든 앱을 호출할 수 있는 작업을 지정합니다. 데이터를 다른 곳에 전송해서, 하나의 데이터를 공유하는데 쓰이는 것입니다. 쿠팡 아이디로 쿠팡 홈페이지, 이츠, 쿠팡 앱에도 로그인 할 수 있게 만드는 역할을 합니다.(실제로 거기에 인텐트가 쓰이는지 모릅니다, 예시입니다)
    // Create the text message with a string.
    val sendIntent = Intent().apply {
        action = Intent.ACTION_SEND
        putExtra(Intent.EXTRA_TEXT, textMessage)
        type = "text/plain"
    }
    
    // Try to invoke the intent.
    try {
        startActivity(sendIntent)
    } catch (e: ActivityNotFoundException) {
        // Define what your app should do if no activity can handle the intent.
    }

    다른 곳에서도 intent를 통해 데이터를 보내고, 그리고 전송받는 곳에서도 코드를 새겨 데이터를 받아내는 창구를 만들어야지 데이터를 전송받을 수 있습니다.

 

 

안드로이드 스튜디오의 Intent

 

 

 

 

1.  Activity A -> Activity B로 넘어가는 경우

 

이때 앞서 말씀드린 것처럼 다른 액티비티로 넘어갈때 쓰입니다.

코드는 Activity 한곳에서만 존재합니다. 위와 같은 경우는 해당 코딩을 Activity A에서 작성해주셔야합니다.

Activity B에서는 따로 작성할 필요는 없습니다.

val intent = Intent(this, bActivity::class.java)
startActivity(intent)

 

그리고 위 코딩을 상황에 따라서 작성해주시면 됩니다. 

코딩이 실행되려면 Intent를 한번 정의를 내린 후에 startActivity() 괄호안에 다시 정의를 내린 intent를 작성해주시면 됩니다. Intent(this는 현재 액티비티, 이동하고 싶은 액티비티)를 입력해주시면 됩니다.

 

만일 버튼을 눌러서 액티비티를 넘기고 싶다면 아래처럼 코딩을 작성하면 됩니다.

var button = findViewById<Button>(R.id.button)
button.setOnClickListener{
	val intent = Intent(this, bActivity::Class.java)
	startActivity(intent)
}

 

*만약에 사용이 안된다면 상위 import에 intent가 있는지 확인해주셔야지 됩니다.

import가 되있지 않다면 안드로이드 스튜디오에서 사용될 수 없습니다.

 

 

 

2.  Activity A 에 있는 데이터를 Activity B에 전송하고 싶은 경우

 

이때에는 두가지 창구가 필요합니다. 데이터를 전송하는 창구와 데이터를 받는 창구가 존재해야합니다. 

그렇기 때문에 위와 같은 경우처럼 액티비티 하나에만 작성하지 않고, 액티비티 두곳에서 작성을 해줘야합니다.

Activity A에서 데이터 전송

A 액티비티에서 아래 코드를 작성해야합니다.

이렇게 되면 아이디의 정보를 전송시키고, 그리고 이 정보의 명칭을 "id"로 정의를 내렸습니다.

var Id = water

val intent = Intent(this, bActivity::Class.java)
intent.push ("id", Id)
startActivity(intent)

 

Activity A로 부터 전송된 데이터를 Activity B에서 받기
B 액티비티에서 아래 코드를 작성해야합니다.

  val idFromA = intent.getStringExtra("id")

 

이때 getExtra를 사용하게 되는데 받게 되는 데이터 타입에 따라 작성을 해주셔야합니다.

데이터가 Int 타입이면 getIntExtra, String이면 getStringExtra를 작성해야합니다.

 

 

*만약에 사용이 안된다면 상위 import에 intent가 있는지 확인해주셔야지 됩니다.

import가 되있지 않다면 안드로이드 스튜디오에서 사용될 수 없습니다.

 

아래에는 공식 홈페이지 설명입니다. 저는 제가 사용하는 기능만 작성했기 때문에 더 활용도 넓게 사용하시려면, 아래를 참고하시는 편이 더 좋을 것 같습니다.

 

 

인텐트 및 인텐트 필터  |  Android 개발자  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 인텐트 및 인텐트 필터 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Intent는 다른 앱 구성요소에서

developer.android.com

 

그러면 좋은 하루 되세요.