본문
[2018.07.28] 109. Scheme 개념과 실습
컴퓨터/이론: 안드로이드 2018. 7. 28. 14:33
도입
이번 포스팅에서는 안드로이드에서 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
'컴퓨터 > 이론: 안드로이드' 카테고리의 다른 글
[2018.09.15] 111. Fragment의 생명 주기 (0) | 2018.09.15 |
---|---|
[2018.09.09] 110. TargetSDK 27로 설정 시, 주의할 점 (0) | 2018.09.09 |
[2018.07.22] 108. Multi-window 개념과 주의할 점 (0) | 2018.07.22 |
[2018.07.14] 107. ScrollView Top 확인방법과 주의할 점 (0) | 2018.07.14 |
[2018.07.14] 106. View attribute 우선순위 (0) | 2018.07.14 |
댓글