Dev./Android

URL Scheme를 사용해보자

like miller 2012. 10. 25. 10:49

내가 만든 앱을 웹브라우저를 통해 실행시키고 데이터를 넘겨줄 수 있다. 잘 이해가 안된다면 지금 스마트폰의 웹브라우저를 통해서 아래 링크를 클릭해보면 쉽게 이해할 수 있다.


*다음 지도가 설치되었다면 클릭 (신도림역이 보일 것이다.)

*카카오톡이 설치되었다면 클릭 (이 블로그 url을 전송한다.)


1. 특정 URL을 사용한다고 선언

다음 지도의 경우 daummaps:// 로 시작하며 그 뒤에 액션 및 파라미터를 추가하여 사용한다.

*다음 지도 URL Scheme 설명 : http://dna.daum.net/apis/urlscheme/mmaps/intro


카카오톡의 경우 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"/>
    </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 라는 값을 얻을 수 있다.



3. 샘플 프로젝트(단순 계산기)

웹 브라우저에서 계산할 값과 연산자를 url scheme로 넘겨주고 앱에서는 이 데이터를 받아서 계산을 수행하는 간단한 앱이다.


url 형태는 bk://calc?op1=25&op2=9&operator=+ 이렇 식이다.


  op1
 계산할 첫 번째 값
  op2  계산할 두 번째 값
  operator  연산자 (+, -, ×, ÷, %)


실행결과


웹페이지 (25+4) 앱 실행 결과 (25+4)

웹 페이지 (25/4)
앱 실행 결과 (25/4)





UrlScheme.zip

전체 샘플 코드 첨부하였습니다.

*글과 자료는 출처만 밝히시면 얼마든지 가져다 쓰셔도 됩니다






UrlScheme.zip
0.62MB