반응형
타 앱을 호출하는 방법 중 Custom URL Scheme 방식으로 호출하는 방법을 설명한다.
타 앱을 호출하는 앱을 Caller 앱, 호출되는 앱을 Callee 앱이라 한다.
1. Caller 앱
Caller 앱은 Callee 앱을 실행하며 데이터를 전달한다.
데이터 전달 받식은 scheme://host?query 형식이다.
- 테스크를 생성하지 않고 Callee 앱 호출
아래 코드로 앱을 호출하면 Caller 앱 내에서 Callee 앱을 호출한다. (Callee 앱의 테스크는 생성되지 않음)
앱 호출 후 메뉴 버튼을 눌러 앱 목록을 확인하면 Caller 앱만 존재한다.
1
2
3
4
5
6
7
|
String urlScheme ="callee://data?key1=value1&key2=value2";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse(urlScheme));
startActivity(intent);
|
cs |
- 테스크를 생성하며 Callee 앱 호출
아래 코드로 앱을 호출하면 Caller 앱과 별개로 Callee 앱의 테스크를 생성하며 호출한다.
앱 호출 후 메뉴 버튼을 눌러 앱 목록을 확인하면 Caller, Callee 앱이 모두 존재한다.
* addFlags 확인
1
2
3
4
5
6
7
8
9
|
String urlScheme ="callee://data?key1=value1&key2=value2";
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse(urlScheme));
startActivity(intent);
|
cs |
2. Callee 앱
Callee 앱은 Caller 앱에서 앱을 실행할 수 있게 scheme, host를 정의하며 전달받은 데이터를 조회한다.
- AndroidManifest.xml에서 scheme, host 정의
실행시킬 Activity에 scheme://host 형태의 URL 정의
아래 예시에서 scheme은 callee, host는 data이며 호출 시 callee://data 형식으로 사용한다.
* 실행시킬 Activity에 android.intent.action.MAIN, android.intent.category.LAUNCHER가 정의된 <intent-filter>가 존재할 경우, 존재하는 <intent-filter>에 아래 내용을 추가하면 안되고 별개의 <intent-filter>에 아래 내용을 추가해야한다.
1
2
3
4
5
6
7
8
|
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="data"
android:scheme="callee"/>
</intent-filter>
|
cs |
- 전달받은 데이터 조회
전달받은 Custom URL Scheme 및 값 조회
ACTION_VIEW Action을 조회한 후 Uri 및 파라미터 조회
1
2
3
4
5
6
7
8
9
10
11
12
|
Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) { // Action 확인
Uri uri = intent.getData(); // Uri 조회
if (uri != null) {
String getUri = uri.toString();
String key1 = uri.getQueryParameter("key1"); // key1 값 조회
String key2 = uri.getQueryParameter("key2"); // key2 값 조회
Log.d(TAG, "getUri : " + getUri); // callee://data?key1=value1&key2=value2
Log.d(TAG, "key1 : " + key1); // value1
Log.d(TAG, "key2 : " + key2); // value2
}
}
|
cs |
- Callee 앱에서 데이터 전달받은 후에, 다시 앱 실행한 경우에 전달받은 데이터가 없음에도 getIntent로 값이 조회되는 문제는 아래 링크 참고
es1015.tistory.com/348?category=683882
반응형
'IT > 안드로이드+JAVA' 카테고리의 다른 글
[안드로이드] Find Security Bugs 사용 방법 (소스코드 정적 분석 도구) (0) | 2020.11.16 |
---|---|
[Android] HTTPS 통신 시 사설인증서 사용 방법 (SSLHandshakeException, SSLPeerUnverifiedException) (4) | 2020.11.07 |
[안드로이드] 앱 내 다크 모드 비활성화 (0) | 2020.10.22 |
[안드로이드] getIntent 데이터 삭제하기 (0) | 2020.10.22 |
[안드로이드+JAVA] 지정한 수 만큼 문자열 잘라서 출력하기 (0) | 2020.10.08 |