본문

[2018.07.28] 109. Scheme 개념과 실습

도입

이번 포스팅에서는 안드로이드에서 Scheme 개념 확인 후 실습을 진행할 예정이다.


개념

Scheme는 URI와 관련이 있다.

URI가 "리소스를 구분하는데 사용되는 문자열"이라면 Scheme의 구성요소이다. 

(출처 - https://en.wikipedia.org/wiki/Uniform_Resource_Identifier)

안드로이드는 intent를 통해 통신한다. 그렇기 때문에 intent 안에는 목적지 정보가 필요하다. 이러한 정보를 URI로 구분한다.


실습

Step1. B app에 Scheme, host 등의 intent 설정 및 intent filter 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<application
    ...
    android:theme="@style/AppTheme">
    <activity android:name=".SecondActivity">
        <intent-filter>
            <action
                android:name="android.intent.action.VIEW"/>
            <category
                android:name="android.intent.category.DEFAULT"/>
            <data
                android:host="mypage"
                android:scheme="heepie"/>
        </intent-filter>
    </activity>
</application>
cs


Step2. A app에서 intent 설정 및 activity 호출

1
2
3
4
5
6
7
8
9
10
11
12
class MainActivity : AppCompatActivity() {
    private val url = "heepie://mypage"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    fun onClickedBtn(v: View) {
        val randomUrl = "$url?param_data=${Random().nextInt()}"
        val intent = Intent(Intent.ACTION_VIEW, Uri.parse(randomUrl))
        startActivity(intent)
    }
}
cs


Step3. B app에서 intent를 받아 데이터 처리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        initData()
    }
 
    private fun initData() {
        if (Intent.ACTION_VIEW == intent.action) {
            val uri = intent.data
            val paramData = uri.getQueryParameter("param_data")
            tv_result.text = "${tv_result.text} param_data: $paramData"
        }
    }
}
cs



스크린샷



#scheme #intent filter

공유

댓글