Android Application
Kotlin 인텐트(intent) : 명시적 인텐트(Explicit Intent)- 다른 앱으로 데이터 전달하기
작성자 임베디드코리아
작성일 23-10-23 22:52
조회1,466회
댓글0건
Kotlin 인텐트(intent) : 명시적 인텐트(Explicit Intent)
다른 프로젝트로 데이터 전달하기
>> 보기 와 받기 두 개의 프로젝트를 제작하여야 함
>> 받는 앱을 먼저 설치하고 보내는 엡을 실행하여양한다
- 보내는 앱을 실행하여 받는 앱을 실행 시키다.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
******* 보내기 앱 *******************************************
-------------------------------------------------------------------------------------
activity_main.xml
-------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:layout_marginStart="20dp"
android:layout_marginTop="352dp"
android:layout_marginEnd="20dp"
android:hint="텍스트를 입력하세요"
app:layout_constraintBottom_toTopOf="@+id/btnGoSubActivity"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnGoSubActivity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="236dp"
android:text="Go SubActivity"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
------------------------------------------------------------------------------------
MainActivity.kt
------------------------------------------------------------------------------------
class MainActivity : AppCompatActivity() {
lateinit var btnGoSubActivity: Button
lateinit var Package_NAME: String
lateinit var Activity_NAME: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setTitle("명시적 인텐트 호출");
btnGoSubActivity = findViewById(R.id.btnGoSubActivity)
Package_NAME = "ek.example.explicitintentapprecivedata"
//Activity_NAME = "ExplicitIntentAppReciveData.MainActivity"
Activity_NAME =Package_NAME + ".RecevSecondActivity"
btnGoSubActivity.setOnClickListener {
var compName : ComponentName =
//ComponentName([패키지명],[액티비티 패키지명])
//ComponentName("ek.example.explicitintentapprecivedata","ek.example.explicitintentapprecivedata.RecevSecondActivity")
ComponentName("$Package_NAME","$Activity_NAME")
var intent : Intent = Intent(Intent.ACTION_MAIN)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
//intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
//intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
intent.addCategory(Intent.CATEGORY_LAUNCHER)
intent.putExtra("KEY", "쫓기는 짐승이 되지 말고, 싸우는 영웅이 되자 !")//키, 전달하고자 하는 값.
intent.setComponent(compName)
startActivity(intent)
startActivityForResult(intent,101)
}
}
}
------------------------------------------------------------------------------------
themes.xml
------------------------------------------------------------------------------------
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.ExplicitIntentAppSendData" parent="Theme.AppCompat.Light">
<item name="colorPrimary">#FF9800</item>
<item name="colorPrimaryDark">#00897B</item>
</style>
<style name="Theme.ExplicitIntentAppSendData" parent="Base.Theme.ExplicitIntentAppSendData" />
</resources>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
******* 받기 위한 앱 *****************************************
-------------------------------------------------------------------------------------
activity_main.xml
-------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="인텐트로 데이터를 받기위한 프로젝트!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
-------------------------------------------------------------------------------------
***** activity_second.xml **
--- res/layout 에서 ---> New --> XML --> Layout XML File
--- File : activity_second , Root Tag : LinearLayout
-------------------------------------------------------------------------------------
<?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" >
<TextView
android:id="@+id/reciveData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"/>
<Button
android:id="@+id/btnReturn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="돌아가기" />
</LinearLayout>
------------------------------------------------------------------------------------
MainActivity.kt
------------------------------------------------------------------------------------
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var msg = this.intent.getStringExtra("KEY") //전송부의 키값의 value를 가져온다.
Toast.makeText(applicationContext, "$msg", Toast.LENGTH_LONG).show()
setResult(2001)
//finish();
}
}
------------------------------------------------------------------------------------
***** RecevSecondActivity.kt **
-- New --> Kotlin Class/File
-- Name : RecevSecondActivity
------------------------------------------------------------------------------------
class RecevSecondActivity : AppCompatActivity() {
private lateinit var btnReturn: Button
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
title = "Second 액티비티"
btnReturn = findViewById<Button>(R.id.btnReturn)
textView = findViewById<TextView>(R.id.reciveData)
}
override fun onResume() {
super.onResume()
var ReciveMSG = this.intent.getStringExtra("KEY") //전송부의 키값의 value를 가져온다.
Toast.makeText(applicationContext, "외부로부터 데이터를 받았습니다.", Toast.LENGTH_LONG).show()
textView.text="$ReciveMSG"
setResult(2001)
//finish()
}
}
------------------------------------------------------------------------------------
AndroidManifest.xml
------------------------------------------------------------------------------------
<activity
android:name=".RecevSecondActivity"
android:exported="true"
android:launchMode="standard">
<intent-filter >
<action android:name="androidx.appcompat.app.AppCompatActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
------------------------------------------------------------------------------------
themes.xml
------------------------------------------------------------------------------------
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Base.Theme.ExplicitIntentAppReciveData" parent="Theme.AppCompat.Light">
<item name="colorPrimary">#2196F3</item>
<item name="colorPrimaryDark">#00897B</item>
</style>
<style name="Theme.ExplicitIntentAppReciveData" parent="Base.Theme.ExplicitIntentAppReciveData" />
</resources>
158-840 서울시 양천구 남부순환로 571(신월동, 영남타운 307호) l 대표: 박길성 ㅣ Tel:02-2695-1114 ㅣ Fax:02-2695-1113
Copyright © 2015 Embedded Korea. All Rights Reserved.