logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

Android - Browser 에서 Activity 실행하기

by digipine posted Oct 29, 2017
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print Attachment
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print Attachment

BROWSABLE category 에 대해서...

만약 어려분의 데스크탑 PC에서 다음과 같은 코드가 들어있는 웹 페이지를 오픈했다고 가정합시다.

<html>
  <h2>anywhere on the web.</h2>
  <A HREF="http://www.digipine.com">Digipine</A><br>
  <A HREF="mailto:me@digipine.com">Mail Me, SS!</A><br>
  <A HREF="foo://my.test.com">Foo? What's that?</A><br>
</html>

anywhere on the web.

Digipine
Mail Me, SS!
Foo? What's that?

첫번째 링크를 클릭하면 여러분의 브라우져는 새로운 페이지로 이동하게될 것입니다. 바로 우리 홈페이지이지요.
두번째 링크를 클릭하면 설정된 기본 메일 프로그램이 실행되고 지정된 주소로 메일을 보낼 수 있겠지요.
마지막으로 세번째 링크를 클릭하면 어떻게 될까요? 당현히 에러 메세지가 출력되겠지오. 브라우져가 어디로 이동해야 할지 알지못하는 링크이기 때문이지요.

하지만 안드로이드에서는 세번째와 같은 특별한 URL을 지정된 액티비티를 샐행하는 것과 같은 동작으로 브라우져에서 사용할 수 있도록 설정할 수 있습니다.
매번 사용자가 브라우져에서 링크를 클릭하면 브라우져는 플랫폼으로 다음과 같은 Intent를 보냅니다.

action = android.intent.action.VIEW
category = android.intent.category.BROWSABLE
data = href tag의 텍스트

 
 
<html>
  <h2>anywhere on the web.</h2>
  <A HREF="tel:123456">Call Me. SS!</A><br>
  <A HREF="mailto:me@digipine.com">Mail Me, SS!</A><br>
  <A HREF="foo://my.test.com">Foo? What's that?</A><br>
</html>

anywhere on the web.

Call Me. SS!
Mail Me, SS!
Foo? What's that?

 
만약 안드로이드 브라우져에서 첫번째 링크를 클릭하면 
action = android.intent.action.VIEW
category = android.intent.category.BROWSABLE
data = "tel:123456"
이런 Intent가 전달되고 다이얼러 어플이 실행될 것입니다. 물론 123456이라는 전화 번호가 표시되어있겠지요.
 
device.png

 

 
마찬가지로 두번째 링크를 클릭하면 메일 어플이 실행되겠지요.
 
마지막으로 세번째 링크를 클릭하면 "페이지를 찾을 수 없다"는 메세지를 보실 수 있을 겁니다.
 
action = android.intent.action.VIEW
category = android.intent.category.BROWSABLE
data = "foo://my.test.com"
 
그리고 브라우져는 위와 같은 Intent를 시스템으로 보냈을 겁니다.
 
만약 특정한 액티비티에서
 
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="foo" android:host="my.test.com" />
</intent-filter>
 
이런 필터를 적용하면 세번째 링크를 클릭했을때에 해당 Activity가 실행 될 것입니다.
잘만 사용하면 매우 편리할 것 같습니다.
TAG •
?