달력

42024  이전 다음

  • 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
안드로이드 폰 써보시는분들 아시겠지만
요즘 어플들 써보시면 대부분 "보내기" 기능같은거 다 있죠?

이게 구현되는 원리는,
어플리케이션은 시스템에 설치되면 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 낭만폭풍
|
앱 내부 결제 모듈같은거 구현할때
휴대폰 인증을 위해 단말기의 통신사를 알아야 할 필요가 있습니다.

 
그럴땐 이걸 쓰면 됩니다.
아래는 구현 예제입니다.
 
반환하는 값은 아래와 같습니다.

SK 텔레콤 : SKTelecom
LG U+ : LG U+ 

KT 등 다른 통신사는 주위에 단말기가 없어서.....
(아시다시피 죄다 아이폰 ㅠㅠ)

아시는분 제보 부탁드리겠습니다(__) 

KT : olleh

Posted by 낭만폭풍
|
안드로이드 2.1 이하의 버전에서는 라이브러리 자체의 버그로 인해
네트워크가 느린 경우에서 스트림의 정보를 제대로 읽어오지 못하는 경우가 있는데
이를 방지하기 위해 FlushedInputStream 을 사용합니다.

대충 원리는 이렇습니다.
2.1에서의 InputStream은 네트워크가 이상하면 스트림의 몇개 바이트를 건너 뛰게 되어 있는데,
이렇게 되면 당연히 읽어온 정보가 없거나 잘못된 정보일 것이니
이를 방지하기 위해 건너뛴 바이트만큼을 다시 읽어들여서 씁니다.
[틀린점 있으면 댓글 환영합니다,]

아래는 해당 소스입니다. (출처 - 안드로이드펍 개발정보 게시판)



Posted by 낭만폭풍
|