뭐할때 쓰는 녀석이냐면
ㄱ. A앱에서 B앱을 호출하고 싶을때,
ㄴ. 주소창에서 A앱을 실행시키고 싶을때,
ㄷ. 1,2번을 하면서 parameter로 값을 전달하고 싶을때.
방법은 간단하다.
우선 andoridmanifest.xml을 열어서 해당 activity에 intent 필터를 추가 시키고,
아래처럼 내용으로 채워준다.
<activity android:name=".ListViewActivity" android:label="@string/app_name">
<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="test2" android:scheme="bill" />
</intent-filter>
</activity>
그리고 호출할때는
bill://test2 (스킴://호스트)
형식으로 하면 된다.
해석하면 bill://teset2를 주소창에 입력하면 ListViewActivity가 실행.
사실 이건 앱을 실행시킨다기보다는
해당 activity를 실행시키는 것이다.
intent filter의 action하고 category를 왜저렇게 했는지 궁금하면
http://developer.android.com/training/basics/intents/filters.html
여기보면 나와있다.
일단 이렇게 만들고 안드로이드 브라우저에서 bill://test2를 입력하면
본인의 목적과는 다르게 브라우저에서 구글링을 해버린다.
그래서 내가 만든게 잘못된나 싶어서 html페이지 하나 띄우고
거기다가 <a href="bill://test2"> 하니까
그제서야 제대로 작동한다.
값얻어오는법
manifest에서 괜히 intent에 data 태그를 쓰는게 아니다.
if(getIntent()!=null){
Uri uri = getIntent().getData();
if(uri != null){
Log.d("MainAtv-receivedata", uri.toString());
Log.d("MainAtv-receivedata", uri.getQueryParameter("confirm")); } }
앱간 데이터 전달
네이티브 앱간에도 데이터 전달하는법.
받는부분이야 위에 적었던 부분하고 동일하고
보낼적에는
manifest에 설정한것 처럼 intent 하나 맹그러서
uri 담아가지고 보내믄 된다.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse("bill2://test2?r=received"));
startActivity(intent);
댓글
댓글 쓰기