달력

32024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
안드로이드 폰 써보시는분들 아시겠지만
요즘 어플들 써보시면 대부분 "보내기" 기능같은거 다 있죠?

이게 구현되는 원리는,
어플리케이션은 시스템에 설치되면 manifest파일이 분석되어
각 activity들의 Intent-fileter에 선언된 action들이 시스템에 등록됩니다.

그래서 특정 어플리케이션에서 암시적 인텐트를 호출하게 되면
상기의 내용들을 가지고
전달된 uri의 내용에 따라 어떤 앱을 띄워줄지 시스템에서 결정하게 됩니다.

아래는 인터넷을 띄우는 인텐트나 사용자가 뭔가 링크를 클릭했을 때 반응하게 하는 IntentFilter의 선언 예입니다.

 

쉽죠? http 를 예로 드니까 뭔지 한번에 딱 알것같죠?
하지만 이게 끝이 아닙니다. 

scheme://host:port/path

어디서 많이 보던 형식같지 않나요? 네 인터넷에서 많이 쓰는 url 형식입니다.
안드로이드도 사용자에겐 보이지 않지만 내부적으로 이런 나름의 프로토콜을 가지고 있답니다.

만약 제가 웹페이지를 하나 만들어서, kkkk://simsim:1111/hae 라는 링크를 걸어 두고.
제 액티비티에  

<intent-filter>
<category android:name="android.intent.category.BROWSABLE />
<category android:name="android.intent.category.VIEW />
<category android:name="android.intent.category.DEFAULT />
<data android:scheme="kkkk" android:host="simsim"/>
</intent-filter>

/**
* DEFAULT는 인텐트필터를 쓰겠다면 꼭! 선언해 주셔야 합니다. 안그럼 안뜹니다.
**/

이라고 선언해 두면, 웹페이지에서 제 어플이 호출되는 마법같은 일(?)이 일어납니다! 
물론 uri가 통채로 날아오며, 이걸 해당 액티비티에서 getIntent().getData() 해서
리턴된 Uri를 맘대로 갖고 노시면 됩니다.

인텐트필터는 이 밖에도 mimeType, pathPrefix, pathPattern 등의 기능이 있는데,
제가 아직 잘 모르는 사항이라 다음에 포스팅 하도록 하겠습니다.


감사합니다. 
Posted by 낭만폭풍
|