반응형
Intent Filter
- 내 앱의 4대 구성요소를(AndroidManifest.xml 에 기록) 다른 앱에서 실행할 수 있도록 설정 -> intent filter 사용해 이름 설정
- 다른 앱에서 구성요소 실행 요청 -> 안드로이드 os가 지정된 intent filte의 이름을 확인하고 정리해 이를 실행
- 단말기 설치시 작동 가능
[다른 앱에서 접근하도록 설정한 액티비티의 Manifest]
- Manifest 파일에서 다른앱에서 실행을 허용할 액티비티에 <intent-filter> 태그 설정
- <action> 태그에는 이름 설정 * 태그의 name이 동일한 액티비티가 2개 이상일 땐 어떤 앱을 실행할건지 물어보는 창이 나옴
- <category> 태그에는 Default 로 설정
- Activity의 exported 는 "true" 로 설정
[앱 1]
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
// Activity가 생성될 때 자동으로 호출
// 화면 전환(가로,세로) 발생시 자동으로 호출되면서 새로운 화면 구현
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) // 뷰바인딩 객체
val view = binding.root //뷰바인딩을 통해 레이아웃과 뷰가 결합 -> .root 를 통해 View 객체만를 뽑아내는(?)
setContentView(view)
// 실행하고자 하는 다른 애브이 액티비티 이름을 설정하고 실행
binding.button2.setOnClickListener {
val intent = Intent("com.example.study_kotlin2.test_activity")
intent.putExtra("data1",10)
intent.putExtra("data2","dddd")
activityResultLauncher.launch(intent)
}
}
// 다른 앱의 액티비티에서 돌아왔을 때 호출
private val activityResultLauncher : ActivityResultLauncher<Intent> = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
){
//Log.d("test","콜백이 메서드가 실행....")
// SubOne에서 결과를 받아옴
if (it.resultCode == 100){
binding.textView.text = "다른 앱에서 돌아왔습니다.\n"
val value1 = it.data?.getIntExtra("value1",0)
val value2 = it.data?.getStringExtra("value2")
binding.textView.text = "value1 : ${value1}\n"
binding.textView.append("value2 : ${value2}")
//객체를 추출
/*
val obj2 = it.data?.getParcelableExtra<TestClass>("obj2")
binding.textView.append("obj2.data1 : ${obj2?.data1}\n")
binding.textView.append("obj2.data2 : ${obj2?.data2}")
*/
}
}
}
[앱2]
class SecondActivity : AppCompatActivity() {
private lateinit var second_binding: ActivitySecondBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
second_binding = ActivitySecondBinding.inflate(layoutInflater) // 뷰바인딩 객체
val view = second_binding.root
setContentView(view)
val data1 = intent.getIntExtra("data1",0)
val data2 = intent.getStringExtra("data2")
second_binding.textView.text = "data1 : ${data1}\n"
second_binding.textView.append("data2 : ${data2}")
Log.d("test","체크포이늩")
second_binding.button.setOnClickListener {
val result_intent = Intent()
result_intent.putExtra("value1", 200)
result_intent.putExtra("value2", "문자열2")
setResult(100,result_intent)
finish()
}
}
}
[결과]
다른 앱 실행 버튼 클릭 (데이터 전달) -> 다른 앱 실행(받은 데이터 추출 성공) 후 종료(데이터 전달) -> 원래 앱으로 다시 돌아옴(받은 데이터 추출 성공)
반응형
'Android' 카테고리의 다른 글
[안드로이드/Activity] Activity Action (0) | 2023.03.31 |
---|---|
[안드로이드/Build Error] Appcompat 버전 문제 (0) | 2023.03.25 |
[안드로이드/Activity] 객체 전달하기 (0) | 2023.03.18 |
[안드로이드/Activity] 데이터 전달 (0) | 2023.03.18 |
[안드로이드] CallBack 과 Listener (0) | 2023.03.11 |