Deperecated/Android_강의

안드로이드 - 다른 애플리케이션의 액티비티 실행하기

누알라리 2020. 2. 18. 04:00
1. Intent Filter

- 안드로이드의 4대 구성요소는 모두 AndroidManifest.xml파일에 기록되어야 한다.

- 이 때 다른 애플리케이션이 실행할 수 있도록 하고자 한다면 Intent Filter를 이용해 설정해주면 된다.

- Intent Filter를 통해 액티비티의 이름을 등록하면 다른 애플리케이션에서 실행이 가능하다.

 

2. App1에서 App2띄우기

1. App2의 AndroidMenifest.xml에서 띄우고자 하는 Activity에 intent-filter를 적용해 action, category를 지정해준다.

        <activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="android.intent.action.SECOND" />

                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

2. App1의 button의 람다식에 Intent를 위 intent-filter의 action명을 넣어 startActivity(intent)를 호출해준다.

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        button.setOnClickListener { view ->

            // 1. 안드로이드OS는 자신이 가지고있는 App의 모든 구성요소를 저장하고있기 때문에 가져올 수 있다.
            // 다른 어플에서 카카오톡으로 로그인하기 이런 기능들이 모두 이것을 이용해서 하는것이다.
            var intent = Intent("android.intent.action.SECOND")
            startActivity(intent)
        }
    }

 

3. 이를 이용해서 한 기능 다른 어플 선택하기

예시화면

1. MainApp, TestApp1, TestApp2를 만든다.

2. TestApp1, TestApp2의 Activity의 intent-filter action의 name을 일치시킨다.

 APP1
 		<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="android.intent.action.SECOND" />

                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
               
 APP2
        <activity android:name=".TestActivity">
            <intent-filter>
                <action android:name="android.intent.action.SECOND" />
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

 

4. 다른 App에 데이터 전달하기

- Intent-filter의 이름이랑 마지막에 StartActivity()만 해주면 같은 app상에서 데이터를 전달하는것과 동일하게 데이터를 전달할 수 있다.

 

<Main>

	val SECOND_ACTIVITY = 1


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        button.setOnClickListener { view ->

            // 1. 안드로이드OS는 자신이 가지고있는 App의 모든 구성요소를 저장하고있기 때문에 가져올 수 있다.
            // 다른 어플에서 카카오톡으로 로그인하기 이런 기능들이 모두 이것을 이용해서 하는것이다.
            var intent = Intent("android.intent.action.SECOND")

            // 2. 다른 App의 Activity를 실행시킬 때 Data전달하기.
            intent.putExtra("data1", 100)
            intent.putExtra("data2", 11.11)

            startActivityForResult(intent, SECOND_ACTIVITY)


        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if(resultCode == Activity.RESULT_OK)
        {
            var data1 = data?.getIntExtra("value1", 0)
            var data2 = data?.getDoubleExtra("value2", 0.0)

            textView.text = "data1 = ${data1}\n"
            textView.append("data2 = ${data2}")
        }
    }
    
    
<APP2>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        var data1 = intent.getIntExtra("data1", 0)
        var data2 = intent.getDoubleExtra("data2", 0.0)

        textView.text = "data1 =  ${data1}"
        textView.append("data2 = ${data2}")


        button.setOnClickListener { view ->
            var intent2 = Intent()
            intent2.putExtra("value1", 200)
            intent2.putExtra("value2", 22.22)

            setResult(Activity.RESULT_OK, intent2)
            finish()
        }
    }