앱을 웹브라우저를 통해 실행시키고 데이터를 넘겨줄 수 있다. 

잘 이해가 안된다면 지금 스마트폰의 웹브라우저를 통해서 아래 링크를 클릭해보면 쉽게 이해할 수 있다.

 

*카카오톡이 설치되었다면 클릭 (이 블로그 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 라는 값을 얻을 수 있다.


+ Recent posts