[TIL]221017 - Kotiln Intent

Jimin·2022년 10월 17일
0

Intent

  • Intent: 실행하려는 의지나 의향
  • 화면1(activity) -> 화면2(activity)
    • 의도를 알려주는 메시지 객체
    • activity간 연결
    • 화면1에서 화면2를 호출 (다른 화면으로 전환)
    • 데이터를 전달하고 반환받을 수도 있음(양쪽 모두 Intent를 사용)

Late Runtime Binding

  • runtime 시 binding 하겠다!
  • Static Binding vs Dynamic Binding
    • satic binding: 컴파일 시에 함수 주소가 정해짐
    • dynamic bindding: 실행 시에 함수 주소가 결정됨
  • ex) file 더블 클릭하면 확장자로 구별함

확장자를 통해 실행할 응용 프로그램 구별은?
어딘가에 저장해애 힘
저장체계 -> 레지스트리

  • 레지스트리란?
    윈도우계열 시스템에서 사용하는 시스템 구성 정보를 저장한 데이터베이스

Intent Type

  • Explicit(명시적) Intent

    • class 이름 명확히 지정
    • Activity class 이름 지정
    • Intent 만들고 startActivity()로 실행
  • Implicit(암시적) Intent

    • 이름을 명시적으로 지정하지 않음
    • 시스템이 적절한 앱 검색하고 그 앱의 액티비티 실행
    • Intent filter를 사용하여 비교하면서 검색
    • Intent filter를 AndroitManifest.xml에 저장

Explicit Intent

val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
  • val: read only variable
  • intent 뒤에 Intent()가 나오므로 별도로 타입 지정 안함
    • 원래는 타입 표기해야함
    • val intent: Intent
  • Intent()는 context와 class 필요
  • Activity이름::class.java
    • java 언어의 class 이름 반환
  • startActivity()에 intent 객체 넘겨주면 새로운 Activity 실행

뒤로 가기 표시

  • Android Manifest.xml
    • parentActivityName 지정 (자신을 시작시킨 Activity 지정)
    • API level 16 필요
    • build.gradle에서 minSdkVersion 바꾸면 됨
<activity android:name=".SecondActivity"
	android:parentActivityName=".MainActivity"/>

Implicit Intent

  • Intent filter
    - AndroidManifest.xml에 저장되어 있음
    • Activity에 intent filter를 지정해 놓으면 다른 앱에서 해당 Activity 실행 가능
      • 지정하지 않으면 Explicit intetn로만 시작 가능!!
  • 유용한 범용의 Activity를 만들었다면 intent filter를 지정하여 implicit intent 실행이 가능하도록 만들 수 있음
  • Package Manager
    • Implicit intent를 실행하려고 할 때 어떤 Activity들이 해당 intent를 처리할 수 있는지 관리
    • 처리할 수 있는 intent가 있는지 확인 필요!!
    if(mapIntetn.resolveActivity(packageManager) != null)
    	startActivity(mapIntent);


Implicit Intent 실습

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.btnHomepage.setOnClickListener {
            val uri = Uri.parse("https://www.velog.io/ssonzm/")
            val intent = Intent(Intent.ACTION_VIEW, uri)
            startActivity(intent)
            
        }
    }
}

0개의 댓글