Android2011. 1. 27. 14:44

여기서 거론되는 "구글 날씨 API"는 사실 iGoogle 가젯을 위한 API이다. 하지만, 필요한 건 결과물만 있으면 되니까...^^ 

[Base URL]

가장 간단한 방법은 도시 명칭을 입력하는 것인데, 아래와 같이 seoul, new york 등 지역명칭을 넣으면 된다.
그런데, 이러한 방법은 지역을 설정하는 UI를 만들거나, 현재 위치가 어느 지역인지 알아내는 등의 방법이 필요하다.

http://www.google.com/ig/api?weather=[seoul , pusan ...]

위의 방법은 구현하는 사람이나 사용하는 사람이나 "귀찮다!!"
현재 위치로 바로 찾는 방법을 찾아보니 훌륭한 외국인(?)들이 이런저런 댓글을 달아놨다.

현재 위치를 입력해서 그 지역의 날씨를 얻어 오는 방법은 아래와 같다.

http://www.google.com/ig/api?weather=,,,36497695,127481491

콤마(,) 3개 ",,," 입력한 뒤, 위도-경도 순으로 입력을 한다. 위경도 사이에는 역시 콤마(,)를 입력한다. 
여기서 한 가지 중요한 점은 위도와 경도에 각각 1,000,000을 곱한 후 입력해야 하는 것이다.

(IE나 파이어폭스에서 주소를 넣어보면 XML 내용을 볼 수 있다.)

[언어 및 단위 설정하기]

ISO 코드를 설정하면, 언어 및 단위 등, 원하는 값을 얻을 수 있는데, 예를 들면, "&hl=en"을 설정하면 영어, mph, 화씨(Fahrenheit) 단위로 변하고, "&hl=ko"는 한국어, kph, 섭씨(Centigrade) 단위로 변한다.

[&hl=en를 설정한 결과]

[&hl=ko를 설정한 결과]


* 지원하는 주요 ISO 언어코드
"en", "da", "de", "es", "fi", "fr", "it", "ja", "ko", "nl", "no", "pt-BR", "ru", "sv", "zh-CN", "zh-TW"

Default는 "en"이기 때문에, 지원하지 않는 코드를 입력할 경우 결과는 영어로 전달된다.

[날씨의 종류]
* 아이콘 업데이트(날씨 아이콘 파일명이 모조리 변경되었다. 기존 개발자들이 곤혹을 겪는 중..)
정확한 날씨 리스트는 찾기 힘들다. 이번에는 친절한 외국인(?)이 노가다로 찾은 결과를 올려줬는데 이는 "아이콘 리스트"이다. 이 리스트가 99% 정확할 것이라고 하니 믿어봄직 하다. ^^ 뭐, 아이콘 명칭으로 대략 어떤 날씨인지 알 수 있을 것이다. 

/NEW 아이콘 리스트/
http://g0.gstatic.com/images/icons/onebox/weather_scatteredshowers-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_sunny-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_partlycloudy-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_mostlycloudy-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_rain-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_cloudy-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_drizzle-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_heavyrain-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_thunderstorms-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_scatteredthunderstorms-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_sleet-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_snow-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_icy-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_dust-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_fog-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_smoke-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_haze-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_snowflurries-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_overcast-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_rainsnow-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_windy-40.gif
http://g0.gstatic.com/images/icons/onebox/weather_heavysnow-40.gif
 
/OLD 아이콘 리스트/
http://www.google.com/images/weather/chance_of_rain.gif
http://www.google.com/images/weather/sunny.gif
http://www.google.com/images/weather/mostly_sunny.gif
http://www.google.com/images/weather/partly_cloudy.gif
http://www.google.com/images/weather/mostly_cloudy.gif
http://www.google.com/images/weather/chance_of_storm.gif
http://www.google.com/images/weather/rain.gif
http://www.google.com/images/weather/chance_of_rain.gif
http://www.google.com/images/weather/chance_of_snow.gif
http://www.google.com/images/weather/cloudy.gif
http://www.google.com/images/weather/mist.gif
http://www.google.com/images/weather/storm.gif
http://www.google.com/images/weather/thunderstorm.gif
http://www.google.com/images/weather/chance_of_tstorm.gif
http://www.google.com/images/weather/sleet.gif
http://www.google.com/images/weather/snow.gif
http://www.google.com/images/weather/icy.gif
http://www.google.com/images/weather/dust.gif
http://www.google.com/images/weather/fog.gif
http://www.google.com/images/weather/smoke.gif
http://www.google.com/images/weather/haze.gif
http://www.google.com/images/weather/flurries.gif

*아래 페이지에서 검색한 결과인데, 구글 아이콘의 퀄리티가 높지 않다고 생각했는지, 자신이 만든 아이콘을 나열해 놓았다. 무료인 것 같으니 사용해도 좋겠다. ^^ (이 아이콘 또한 예전 파일명이다. 새로운 날씨명칭에 대한 아이콘이 필요해졌다. ㅠ.ㅠ)
*한글로 된 날씨 명칭을 알면 좋겠는데, 진짜 노가다가 필요할 것 같다. 

[결과 사용하기]

구글 날씨 API는 결과값을 XML형태로 제공한다. XML만 분석하면 이런저런 기능으로 활용이 가능하다.
구글 날씨는 현재날씨, 오늘의 예상날씨, 이후 3일의 예상날씨를 제공한다.
제공되는 정보는 매우 적다.


[기타 다른 API]


[참고사항]

C#에서 구글 날씨 API 사용한 예

날씨 API에 대한 리뷰

iGoogle Dev Forum


Posted by 데브로망스
Android2011. 1. 24. 13:49

Bump란?
가속도 센서가 있는 두 개의 단말기를 서로 부딪혀 양 단말기를 인식한 후, 다양한 형태의 데이터(연락처, 이미지, 사용자 데이터 등)를 교환할 수 있는 서비스입니다.

동작방식
1. Bump는 블루투스나 적외선 통신이 아닌, Wifi, 3G 등을 이용합니다.
2. 서로의 단말기를 인식하기 위해, 각각의 단말기의 부딪힌 시간, 위치, 각도를 Bump 서버로 송신을 합니다.
Bump서버는 두 개의 단말기에서 받은 정보를 매칭 알고리즘을 사용하여 인지한 후, 각각의 단말기에 매칭3. 결과가 옳은지 서로의 단말기에 질의를 합니다.
4. 질의를 받은 두 사용자 모두 커넥션을 허가할 경우 통신을 시작합니다.
5. 주고 받는 데이터는 모두 Bump 서버를 통합니다.



Licence
Bump는 무료다. 
Bump아이콘과 Bump Trademark를 사용하는 몇몇 제약들이 있지만, 이러한 간단한 요소들만 침해하지 않으면 무료로 사용할 수 있습니다. Bump 홈페이지에는 아래와 같이 무료 사용 라이센스와 관련된 문구가 있습니다.

 
We Can…
아이폰과 안드로이드폰 간에 통신이 가능하다. 
아이폰과 안드로이드 폰에 동일한 API Key를 사용하는 App.을 개발 및 설치를 한다면 서로 매칭 및 통신이 가능합니다. 개발 시, 전송하는 Data의 Format만 고민하면 됩니다.

Binary Data도 전송이 가능하다. 
이미지 및 사용자가 정의한 Binary형식도 전송이 가능합니다. 모든 데이터는 Byte Array형식으로 전송합니다.

We Cannot…

256KB보다 큰 사이즈는 송수신할 수 없다. 
256KB를 넘는 이미지를 전송하면, 에러가 발생합니다. 안드로이드에서는 아래와 같은 에러메시지가 출력됩니다.



실제로 Bump 공식 App에서 2MB를 넘는 이미지를 전송하면, 수신측으로 전송되는 이미지는 100KB 안 팎으로 압축(JPEG)되어 있음을 확인했습니다.
 
Bump API는 SDK 형태로 제공되고, 웹 URL형식으로는 제공되지 않기 때문에 SDK가 제공되는 플랫폼에서만 개발이 가능합니다. 즉, iOS, Android OS에서만 개발이 가능합니다.

실제 샘플 코드는 다음에 정리해서 올리겠습니다. ^^

참고자료
Bump 공식 사이트 : http://bu.mp

Posted by 데브로망스
Android2011. 1. 4. 18:22
구글 개발자 페이지에는 Reference 페이지가 있습니다.

마이크로소프트의 MSDN 페이지처럼 사용할 수 있는 패키지, 클래스 등등의 스펙을 확인 할 수 있습니다.

아직 예제코드가 빈약해서 투덜투덜하게 되지만, 아래에 소개할 간단한 Tip은 상당히 유용합니다.

Android API Level은 벌써 9까지 존재합니다.

버전이 높아지면서 패키지, 클래스, 멤버함수 등이 추가되거나 변경되는데,

항상 버전관리를 염두에 둬야 하는 상황이라면 이를 하나하나 체크하는 것도 쉽지 않을 것 같습니다.

그래서, 구글 개발자 페이지에서는 이를 Filtering 할 수 기능을 제공하고 있습니다.

사용방법은 간단합니다.

페이지 우측 상단에는 "[√] Filter by API Level"이라는 체크박스가 있습니다.

체크[√] 를 하면, 활성화 되는데, 여기서 개발중인 App의 API Level을 선택하면 됩니다.

(그 밑에는 "Since:API Level 1"이라고 적혀있는데, 이는 VideoView 위젯이 API Level 1 시절에 추가되었다는 의미입니다. Reference 페이지를 보다 보면, 클래스마다, 함수마다 각각의 API Level을 적어 두었습니다.)



아래 그림과 같이 Filter Level을 4로 설정하면, 사용할 수 없는 함수명이 비활성화됩니다.
확인해보니, VideoView의 resume() API Level 8 에서 추가된 기능이네요.



다음은 Filter Level을 7로 설정했을 때, 사용할 수 없는 패키지명이 비활성화되는 예제입니다.
역시, 확인해 보니, ..admin과 ..backup 패키지는 API Level 8에서 추가된 녀석들이네요.



Filter Level을 8로 설정했을 때, 비활성화된 클래스입니다.
OverScroller는 API Level 9에서 추가된 녀석이라고 하네요.


도움이 되셨길 바랍니다. ^^


Posted by 데브로망스
Android2010. 12. 29. 19:15
테스트 앱을 Galaxy Tab상에 올려보니 아래와 같이 귀엽게(?) 보여지고 있었습니다.






간단하게 아래와 코드(Line 5)와 같이 패니페스트 파일에  "android:minSdkVersion" 속성을 부여하여 해결했습니다.(아래 그림 참고)

     
          
           ................     
          
     
 





[테스트 1] minSdkVersion값을 3과 4를 부여해보니....
'3'인 경우 화면이 작게 나오고, '4'이상을 적용하면 정상적으로 출력됩니다.

안드로이드 1.6(API  Lv.4)부터, 다양한 스크린 사이즈 및 해상도를 지원하기 시작했습니다. (Galaxy Tab의 해상도는 600x1024입니다.) 때문에, "android:minSdkVersion" 속성을 '4' 이상으로 부여해야만 Galaxy Tab 화면에 맞게 보여집니다.

자세한 내용은 아래 링크에서 "Range of screens supported" 항목을 참고하시면 됩니다.

이 속성의 의미를 정확히 알기 위해 "uses-sdk" 속성에 대해서 좀 더 알아봤습니다.

아래는 버전과 관련된 속성들에 대한 구글개발자 페이지를 해석한 내용입니다.

android:minSdkVersion
플랫폼 버전에 따라 별도로 부여된 정수(Integer)값이다. 만약, 내가 만든 App에서 지정한 minimum SDK Level값보다 사용자의 시스템의 API Level이 낮은 경우, 사용자는 안드로이드 시스템에 의해 설치가 거부당한다.
앱을 실행하는데 요구되는 최소한의 API Level을 지정할 수 있다. API Level값은 SDK 또는 안드로이드 플랫폼버전이 아니다. 
minSdkVersion의 Default 값은 '1'입니다. 즉, 따로 지정하지 않으면 시스템은 개발한 App을 API Level을 '1'로 간주하고, 이는 안드로이드의 모든 버전에 호환된다는 의미가 됩니다. 여기서 문제가 발생할 수 있습니다. 예를 들면 API Level 7에서 최초로 소개된 API들을 사용하고 minSdkVersion 속성을 지정하지 않았을 경우입니다. 이 App을 다운받은 사용자의 시스템은 Level 7 미만이라면, 설치는 성공할 수 있으나 Run-time시 허용되지않은 API에 접근할 때 죽거나 하는 문제가 발생합니다. 이러한 이유로 안드로이드에서는 minSdkVersion 속성값은 반드시 설정하도록 권고하고 있습니다.

android:targetSdkVersion
targetSdkVersion은 API Level 4부터 추가된 속성입니다.
이 속성을 설정하면 설정한 버전에서 minSdkVersion에서 설정한 버전까지 구동이 가능하다는 것을 의미하며, 설정한 버전에서 충분히 테스트가 되었다는 의미를 갖게 됩니다.

이 설정을 사용하면, 타겟 버전에서 요구되지 않고 포워드 호환성을 유지하기 위해 활성화되는 셋팅들은 안드로이드 플랫폼에 의해서 비활성화된다. 또한, 타겟 버전 이전에서 불가능 했던 새로운 기능은 활성화된다.
결국, 타겟 버전에서 충분한 테스트를 완료했고 더불어 포워드 호환성을 위한 어떠한 추가 작업을 수행해서는 안된다는 내용을 플랫폼에 통지하는 것이다.

minSdkVersion에서 설정한 레벨에 따라 제한된 것들을 무시하고, 타겟 API Level에서 정의한 manifest요소 또는 행위를 허용하게 된다.

android:maxSdkVersion
Api Level 4부터 추가된 속성이다.
안드로이드 1.5부터 2.0.1에서는 시스템 업데이트 후, App들의 유효성 재검사를 할 때 이 값을 체크한다. 시스템은 App에 설정된 maxSdkVersion 값이 시스템의 API Level값 보다 낮으면 어떠한 경우에도 설치를 허가하지 않는다. 유효성 재검사 이후에는 사용자의 단말기에서 이 App을 삭제한다.

실제 발생할 수 있는 상황을 쉽게 설명해 보자.
maxSdkVersion 값을 5로 설정한 App이 안드로이드 마켓에 등록이 되었다. Android 1.6(Lv.4)기반의 단말기 유저는 얼마 후 Android 2.0 (Lv.5)이 출시되었다는 사실을 알고 단말기를 업데이트 했다. 업데이트가 완료되자 시스템은 maxSdkVersion 값이 5였던 App에 대해 유효성 검사를 문제없이 진행한다. 이 App은 기존과 같이 문제없이 동작한다. 그러나, 얼마 후  Android 2.0.1(Lv. 6)이 공개되었고 사용자는 다시 업데이트를 한다. 여기서 문제가 발생했다. maxSdkVersion 값이 5인 App은 시스템의 API버전이 Lv.6가 되어서 업데이트 후 유효성 검사에 통과할 수 없었다. 시스템은 이 App의 설치를 허가하지 않았으며 사용자 단말기에서 삭제를 했다.

[경고]
이 속성을 부여하는 것은 권장하지 않는다. 이유는 첫째, 새로운 버전에서 우리가 만든 App의 설치를 막을 이유가 없다는 것이다. 새로운 안드로이드 플랫폼은 백워드-호환성을 100% 보장한다. 즉, 표준 API를 사용했다면 분명히 새로운 플랫폼에서 잘 동작할 것이다.
두 번째, 이 속성을 사용하면 플랫폼 업데이트 이후, 통과하지 못한 App이 사용자의 단말기에서 삭제되기 때문이다. 우리의 APp이 설치된 대부분의 단말기의 플랫폼은 지속적으로 업데이트 될 것이다. 이 속성을 부여하기 전에 사용자가 받을 영향을 반드시 고려해야 한다.


안드로이드 2.0.1 이후의 버전부터는 maxSdkVersion를 체크하지 않을 예정이다. 하지만, 안드로이드 마켓에서는 사용자에게 다운로드 가능한 App들을 소개할 때 필터링 기능으로 사용할 것이다.


[테스트 2] android:minSdkVersion="9"을 부여하면...?
 Lv.8인  Galaxy Tab에는 설치 또는 디버깅이 불가능합니다. 이클립스에서 보여준 에러 메시지는 다음과 같습니다.

ERROR: Application requires API version 9. Device API version is 8 (Android 2.2).
Launch canceled!

[테스트 3] android:maxSdkVersion="5" 를 부여하면?
 Lv.8인 Galaxy Tab에서 설치하는데 문제가 없었습니다. 위의 해석문 마지막의 말대로 Android 2.0.1 이후 버전에는 이 속성에 따른 강제 내용이 사라진 것으로 판단됩니다. Android 1.6 버전 단말기가 없으니 정확한 테스트는 안했습니다. 귀찮기도 하고 별 중요한 내용이 아니네요.

[테스트 4] android:minSdkVersion="9" , android:targetSdkVersion="7"을 부여하면?
Lv8인 Galaxy Tab에서 테스트 2번과 같은 결과를 볼 수 있었습니다. 타겟 버전을 부여해도, minimum API Version값에 부합되지 않으면 설치가 거부되네요. (타겟 버전에 대한 정확한 의미는 좀 더 알아봐야겠네요. 쉽게 설명해 놓은 내용 없나요...? ^^)


잘못된 내용은 지적해주시면 감사하겠습니다. ^^



Posted by 데브로망스