앱을 웹브라우저를 통해 실행시키고 데이터를 넘겨줄 수 있다.
잘 이해가 안된다면 지금 스마트폰의 웹브라우저를 통해서 아래 링크를 클릭해보면 쉽게 이해할 수 있다.
*카카오톡이 설치되었다면 클릭 (이 블로그 url을 전송한다.)
1. 특정 URL을 사용한다고 선언
카카오톡의 경우 kakaolink:// 로 시작하며 그 뒤에 액션 및 파라미터를 추가하여 사용한다.
*카카오 링크 설명 : http://www.kakao.com/link/ko/api?tab=mobile
위 앱처럼 자신만의 url을 사용할 수 있게 해보자. 그러기 위해서는 manifest 파일에 선언해 주어야 한다.
액티비티 태그 안에 intent-filter를 추가하여 속성을 뷰여하자.
action은 View, category는 DEFAULT와 BROWSABLE.
여기까지는 url scheme를 사용하기 위한 준비이고 그렇다면 자신만의 url scheme를 등록해 보자.
마찬가리로 intent-filter에 data 를 추가한다. scheme는 http, daummaps, kakaolink 같은 프로토콜 부분이다. host는 www.daum.net과 같이 프로토콜 이후에 나오는 경로이다. 이 부분은 url을 사용하는 액티비티를 구분하던지, 동작형식을 구분하던지 자신에게 알맞는 용도로 사용하면 된다.
AndroidManifest.xml <activity android:name=".BkCalculatorActivity" android:label="@string/title_activity_calc"> <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:scheme="bk" android:host="calc"> </data></category></category></action></intent-filter> </activity> |
2. 소스상에서 host 및 파라미터 받는 방법
url scheme를 사용하면 url 형태로 데이터가 들어오기 때문에 해당 url에서 어떤 액션인지 어떤 파라미터가 있는지 알아야 구분해서 처리를 할 수 있다.
url scheme 를 통해서 액티비티가 실행되면 intent에 data 가 포함되어 들어온다.
Uri data = getIntent().getData(); 를 통해서 data를 받아올 수 있다.
여기서 getIntent().getData(); 값이 null 인지 아닌지 체크를 해야 한다. 그냥 실행된 것인지 url 을 통해서 실행된 것인지 판단해야 하기 때문이다. 그냥 실행된 것이면 null 이된다.
Uri data = getIntent().getData(); if(data != null) { //url을 통해서 실행된 것. 파라미터를 받아서 작업 수행해야 함. } |
Uri의 다양한 메소드를 통해서 여러가지 값을 알 수 있다.
toString() 으로 전체 url 형태를 알 수 있다.
getHost() 로 host 값을 알 수 있다.
getQuery()로 전체 파라미터를 알 수 있다.
getQueryParameter(String key) 로 각각의 파라미터의 값을 알 수 있다.
만약 bk://calc?op1=25&op2=9&operator=+ 이렇게 url을 실행 시키면
scheme 는 bk가 되고 host는 calc가 되면 전체 query는 op1=25&op2=9&operator=+ 이다.
만약 getQueryParameter("op1") 을 하면 25 라는 값을 얻을 수 있다.