'프로그래밍/안드로이드'에 해당되는 글 11건
- 2012/04/30 안드로이드 디바이스 식별자를 선택하는 방법에 대한 정리
- 2012/04/01 안드로이드 음성 처리 API에 대한 정리
- 2011/10/18 안드로이드 다이어로그 만들기
- 2011/10/02 안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..)
- 2011/09/30 안드로이드 컨텍스트 메뉴 만들기
- 2011/09/29 안드로이드 옵션 메뉴 만들기
- 2011/09/20 모바일 어플리케이션의 성능 향상에 대해~
- 2011/09/08 안드로이드 dp, sp 단위에 대한 정리 (2)
- 2011/08/26 구글맵 라이선스의 무료 사용 범위에 대한 정리 (3)
- 2011/08/25 SKT T-Store App 소개 바로가기 URI
스마트폰 어플리케이션들이 증가하면서 각각의 디바이스에 대한 구분이 필요할 때가 있습니다.
이때 사용할 수 있는 것이 디바이스 식별자인데요.
아이폰의 경우에는 UDID라고 하는 디바이스별 식별자가 포함되어 있어 Unique하게 구분할 수 있습니다.
그러나 안드로이드에서는 고유한 식별자가 일률적이지 않아 어려움이 있는데요.
이 부분을 잘 정리해 놓은 글이 있네요. Tim Bray의 identifying App Installations 인데요.
Android에서 식별자로 사용할 수 있는 항목들을 설명하고 결국 자체 UUID를 활용하는 것이 바람직하다고 되어 있네요..
휴유님의 안드로이드의 개별 디바이스를 구분하는 방법을 보면 이 글을 한글로 잘 번역해 놓으셨네요.
그럼 내용을 다시한번 정리해 보도록 하겠습니다.
1. Device ID
TelephonyManager.getDeviceId() 메소드를 활용해서 디바이스의 ID 정보를 가져오는 것입니다.
일반적으로 휴대폰에 포함된 IMEI, MEID, ESN 등의 값을 유일한 값으로 활용하는 것이죠.
그러나 전화기가 아닌 단말에서는 해당 값이 없고, READ_PHONE_STATE 속성을 가지고 있어야 한다는 점이 이슈라고 하네요.
2. MAC Address
WIFI에 포함된 MAC Address를 활용하는 방법도 있다고 합니다.
그러나 WIFI가 없는 단말도 있으며,
특히 특정 단말에서는 WIFI가 ON 상태가 아니면 MAC Address 값이 없는 경우도 있다고 하네요.
3. Serial Number
원래 이걸 찾다가 위 글들을 찾은 것인데요. Build 클래스에 보면 SERIAL이라는 값이 있습니다.
android.os.Build.SERIAL 인데요. 2.3 진저브레드부터 지원하기 시작했다고 합니다.
즉, 2.2 프로요 이전 버전에서는 지원하지 않구요.
2.3 이후 버전도 필수 항목이 아니어서 제공하지 않는 단말도 있다고 하네요.
4. ANDROID_ID
Setting.Secure.ANDROID_ID 값을 유일키로 활용할 수도 있다고 합니다.
64 비트의 고유값으로 Tim Bray는 가장 추천하고 있는데요.
폰을 초기화 할 경우 삭제되고 다시 생성되는 정보 이구요.
프로요(2.2) 버전 이하에서는 신뢰성이 떨어질 수 있다고 합니다.
마지막으로 아이폰에서 UDID를 가져오는 방법도 정리해 봅니다.
이런 측면에서 보면 여러 제작사가 만드는 안드로이드보다 아이폰이 장점이 될 수 있다는 생각도 드네요.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 디바이스 식별자를 선택하는 방법에 대한 정리 (0) | 2012/04/30 |
|---|---|
| 안드로이드 음성 처리 API에 대한 정리 (0) | 2012/04/01 |
| 안드로이드 다이어로그 만들기 (0) | 2011/10/18 |
| 안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..) (0) | 2011/10/02 |
| 안드로이드 컨텍스트 메뉴 만들기 (0) | 2011/09/30 |
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
아이폰에 비해 안드로이드는 개발에 제한이 많이 없습니다.
아이폰은 Sandbox와 같은 형태로 Application 간의 영역 공유가 제한되어 있지만, 안드로이드에서는 Intent를 통해서 자유롭게 영역을 넘어들 수 있게 됩니다.
그렇다면 음성 처리와 관련되어 안드로이드에서는 어디까지 가능할까요?
관련된 API들을 한번 정리해 봤습니다.
안드로이드에서 음성을 처리하는 가장 기본적인 SDK는 바로 MediaPlayer입니다.
만약 통화 중 녹음과 같은 기능을 구현하고 싶다면 MediaRecorder와 같은 클래스를 활용하면 됩니다.
MediaRecorder의 AudioSource를 활용해서 해당 기능들을 구현할 수 있을 겁니다.
MediaRecorder의 state diagram은 다음 그림과 같네요.
만약 통화 관련 음성들을 처리하고자 할 경우에는 Telephony 클래스를 활용할 수 있습니다.
이중 TelephonyManager를 사용하면 폰상태(getCallxxx), 디바이스정보(getDevicexxx), Sim정보(getSimxxx) 등을 가져올 수 있으며
통화 시작, 종료와 같은 이벤트를 통해 해당 시그널 발생시 원하는 작업을 처리할 수 있을 겁니다.
이외에도 Audio 관련한 API로 AudioCode, AudioEffect, AudioFormat, AudioManager 등 다수 존재하고 있습니다.
추가로 Voice와 관련해서 voicemail과 같은 클래스도 있네요.
실은 이러한 API를 확인해 본 것은 통화중 음성 신호를 가져와 변조해서 다시 통신 시그널로 보낼 수 있을까 해서였습니다.
그러나 현재까지 확인한 바로는 통화중 음성 신호를 녹음 등을 위해 가져올 수는 있었지만 다시 통신 시그널로 보내는 API는 없었습니다.
아마도 퀄컴과 같은 모뎀 칩에서 H/W적으로 통신 시그널, 즉 PCMDATA를 보내기 때문인 것 같습니다.
물론 Software Block으로 구성한 음성 인코딩 기능이 이런 칩셋에 포함되어 있겠지만 외부로는 공개되어 있지 않은 것 같네요.
VOIP의 SIP / RTP 프로토콜을 활용하면 이러한 문제를 어느정도 해결할 수 있겠지만
아무래도 중계기를 거쳐야 하는 제한점이 존재할 것 같네요..
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 디바이스 식별자를 선택하는 방법에 대한 정리 (0) | 2012/04/30 |
|---|---|
| 안드로이드 음성 처리 API에 대한 정리 (0) | 2012/04/01 |
| 안드로이드 다이어로그 만들기 (0) | 2011/10/18 |
| 안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..) (0) | 2011/10/02 |
| 안드로이드 컨텍스트 메뉴 만들기 (0) | 2011/09/30 |
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
다이어로그는 프로그래밍에서 기본적으로 많이 사용하는 항목입니다.
javascript의 alert();이나 VC++의 MessageBox()와 같은 형태로 많이 사용되죠..
안드로이드에서는 다음과 같은 다이어로그를 사용할 수 있습니다.
- AlertDialog: 아이콘, 메시지, 버튼 3개를 가지며 가장 많이 사용됨
- DatePickerDialog: 달력에서 날짜를 제공하며 날짜 설정을 가능하게 함
- ProgressDialog: 실행 상태를 통지하는 진행 바를 포함
- TimePickerDialog: 시간을 제공하여 시간 설정을 가능하게 함
- ZoomDialog: 줌 레벨을 선택함. 주로 지도에서 사용
이 중에서 주로 사용하는 AlertDialog에 대해서 간략하게 살펴보려고 합니다.
나머지는 관련 서적이나 매뉴얼을 참고하시기 바랍니다.
AlertDialog를 사용하는 기본적인 함수의 원형은 다음과 같습니다. JavaScript의 show();와 비슷한 형태네요.. ^^
public AlertDialog show()
아이콘, 메시지, 제목을 설정하는 부분은 다음과 같이 합니다.
// 아이콘 설정
public AlertDialog.Builder setIcon (int iconId or Drawable icon)
// 메시지 설정
public AlertDialog.Builder setMessage (int messageId or CharSequence message)
// 제목 설정
public AlertDialog.Builder setTitle (int titleId or CharSequence title)
그리고 버튼 처리를 위해서는 다음 세가지를 사용할 수 있습니다.
public AlertDialog.Builder setNegativeButton (CharSequence text or int textId, DialogInterface.OnClickListener listener)
public AlertDialog.Builder setNeutralButton (CharSequence text or int textId, DialogInterface.OnClickListener listener)
public AlertDialog.Builder setPositiveButton (CharSequence text or int textId, DialogInterface.OnClickListener listener)
버튼을 식별하기 위해 위처럼 구분할 뿐, 구현할 때는 각각의 버튼에 대해 onClick 이벤트를 처리해 주기 때문에 큰 의미는 없다고 보이네요..
자.. 그러면 간단하게 다이어로그를 출력하는 예제를 살펴보도록 하지요..
먼저 아래 두 예제를 위해서 main.xml에 다음과 같이 Button을 추가하도록 합니다.
이어서 기본적인 형태의 Dialog를 출력해 보도록 하겠습니다. 주석을 달아놓았으니 이해하기 어렵지 않을 겁니다.
실행된 내역은 다음과 같습니다.
중간에 Back Button이 동작하지 않도록 세팅도 해봤습니다.
리스트, 체크박스, 라디오버튼 등을 Dialog에 추가할 수도 있습니다. 각각의 함수 원형은 다음과 같습니다.
public AlertDialog.Builder setItems (CharSequence[] items, DialogInterface.OnClickListener listener)
public AlertDialog.Builder setMultiChoiceItems (int itemsId or CharSequence[] items, boolean[] checkedItems, DialogInterface.OnClickListener listener)
public AlertDialog.Builder setSingleChoiceItems (int itemsId or CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener)
리스트를 추가한 예제를 한번 살펴보시기 바랍니다. XML 설정은 위와 동일합니다.
실행 내역은 다음과 같습니다. 설정한 값에 따라 버튼의 배경색을 지정하도록 구현되어 있네요.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 디바이스 식별자를 선택하는 방법에 대한 정리 (0) | 2012/04/30 |
|---|---|
| 안드로이드 음성 처리 API에 대한 정리 (0) | 2012/04/01 |
| 안드로이드 다이어로그 만들기 (0) | 2011/10/18 |
| 안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..) (0) | 2011/10/02 |
| 안드로이드 컨텍스트 메뉴 만들기 (0) | 2011/09/30 |
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
안드로이드 개발하다보면 가끔 소스에는 전혀 오류가 없는데...
더군다나 지난번에는 제대로 사용했는데..
오류가 나면서 컴파일이 안되는 경우가 있습니다.
이럴 때 나타나는 오류 메시지는 다음과 같습니다.
Error generating final archive: Debug certificate expired on ..
Debug와 관련된 인증 기간이 만료되어서 발생한 오류입니다.
Debug certificate는 만들어진 후 365일이 지나면 만료되게 됩니다.
그러므로 만료된 Debug certificate를 새로 갱신해주면 되는데요.. 다음과 같은 방법으로 처리하면 됩니다.
바로 debug.keystore 파일을 찾아서 삭제한 후, 안드로이드 애플리케이션을 빌드 하면 오류는 해결됩니다.
debug.keystore 파일의 위치는 이클립스의 환경설정에서 찾을 수 있습니다.
Window > Preferences > Android > Build 에서 'Default debug keystore' 항목을 보면 debug.keystore 파일의 위치를 알 수 있네요.
윈도우 탐색기 등에서 해당 폴더로 이동한 후, debug.kestore 파일을 삭제하시면 잘 될 거예요.. ^^
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 음성 처리 API에 대한 정리 (0) | 2012/04/01 |
|---|---|
| 안드로이드 다이어로그 만들기 (0) | 2011/10/18 |
| 안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..) (0) | 2011/10/02 |
| 안드로이드 컨텍스트 메뉴 만들기 (0) | 2011/09/30 |
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
| 모바일 어플리케이션의 성능 향상에 대해~ (0) | 2011/09/20 |
지난번에는 안드로이드 옵션 메뉴에 대해서 살펴봤는데요.
2011/09/29 - [프로그래밍/안드로이드] - 안드로이드 옵션 메뉴 만들기
이번에는 컨텍스트 메뉴를 만들어 보도록 하겠습니다.
컨텍스트 메뉴는 해당 뷰를 길게 누르고 있으면 나타나는 메뉴입니다.
기본적인 개념은 옵션메뉴와 크게 다르지는 않지만, 특정한 뷰를 기반으로 하고 있다는 점이 큰 차이라고 할 수 있습니다.
컨텍스트 메뉴와 관련된 메소드는 다음과 같습니다.
컨텍스트 메뉴 생성
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
컨텍스트 메뉴 선택
public boolean onContextItemSelected(MenuItem item)
그리고 중요한 것이 하나 있습니다.
바로 컨텍스트 메뉴를 각각의 액티비티 혹은 뷰에 등록해야 하는데요..
다음 두 가지 구문 중 하나만 사용해서 등록하면 됩니다.
public void registerForContextMenu(View view)
public void setOnCreateContextMenuListener(View.OnCreateContextMenuListener l)
registerForContextMenu() 메소드가 내부적으로 View.OnCreateContextMenuListener()을 호출하기 때문에 둘 중에 하나만 사용해도 된다고 하네요..
소스를 테스트 하기 위해서는 기본으로 만들어진 레이아웃인 main.xml에서 <TextView>에 아이디를 부여해 주셔야 합니다.
아래 예제를 위해서는 다음과 같이 부여하면 됩니다.
android:id="@+id/textView"
다른 부분을 길게 누르면 아무 반응이 없지만 텍스트를 길게 누르면 컨텍스트 메뉴가 나타나는 것을 볼 수 있습니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 다이어로그 만들기 (0) | 2011/10/18 |
|---|---|
| 안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..) (0) | 2011/10/02 |
| 안드로이드 컨텍스트 메뉴 만들기 (0) | 2011/09/30 |
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
| 모바일 어플리케이션의 성능 향상에 대해~ (0) | 2011/09/20 |
| 안드로이드 dp, sp 단위에 대한 정리 (2) | 2011/09/08 |
안드로이드 관련 기본적인 사항들을 나중에 찾기 쉽도록 하니씩 정리해 볼 계획입니다.
첫 번째로 옵션 메뉴에 대한 내용입니다.
안드로이드와 아이폰의 가장 큰 차이는 바로 이 옵션 메뉴가 별도로 있다는 건데요.
옵션 메뉴는 다음 그림과 같이 기본적으로 6개까지 나타낼 수 있습니다.
6개가 넘어게 만들 수도 있는데요.. 이런 경우, 마지막 항목에 "More.." 가 나타나게 되지요.
옵션 메뉴를 만들기 위해 필요한 메소드들을 먼저 정리해 봤습니다.
옵션메뉴 생성
public boolean onCreateOptionsMenu(Menu menu)
실행 중 옵션메뉴 변경
public boolean onPrepareOptionsMenu(Menu menu)
메뉴항목 선택
public boolean onOptionsItemSelected(MenuItem item)
그리고 매개변수로 사용하는 메뉴 객체를 생성하기 위한 메소드는 다음과 같습니다.
메뉴항목 추가
public abstract MenuItem add(int groupId, int itemId, int order, CharSequence title)
서브 메뉴항목 추가
public abstract SubMenu addSubMenu(int groupid, int itemId, int order, CharSequence title)
마지막에 CharSequence title 대신 int titleRes를 사용할수도 있겠죠..
간단하게 메뉴를 생성하고 선택하는 소스를 한번 살펴보도록 하시죠.
단축키로 알파벳 설정하는 부분이나 아이콘 설정하는 부분들을 유의해서 살펴보시면 도움이 됩니다.
onCreateOptionsMenu와 onOptionsItemSelected 메소드를 활용해서 간단하게 구성해봤습니다.
메뉴를 선택하면 간단한 Toast로 메시지를 출력하도록 구성했습니다.
위 예제처럼 프로그래밍으로 메뉴를 구성할 수도 있고, Resource에 Menu를 XML로 만들어서 처리할 수도 있습니다.
XML로 구성해서 처리하는 방법에 대해서 정리해 봅니다.
먼저 res/menu 폴더를 만들고 option_menu.xml을 다음과 같이 구성합니다.
그리고 난 후, 다음과 같이 코딩해 주면 됩니다.
onPrepareOptionsMenu를 사용해 보기 위해 use라는 멤버 변수를 구성했습니다.
그리고 use 값이 1인 경우에, 메뉴의 이름을 변경해 봤습니다.
최종적인 형태는 다음 그림과 같이 나타납니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 소스 오류 없는데 오류 표시되어 있는 경우 (Debug certificate expired on..) (0) | 2011/10/02 |
|---|---|
| 안드로이드 컨텍스트 메뉴 만들기 (0) | 2011/09/30 |
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
| 모바일 어플리케이션의 성능 향상에 대해~ (0) | 2011/09/20 |
| 안드로이드 dp, sp 단위에 대한 정리 (2) | 2011/09/08 |
| 구글맵 라이선스의 무료 사용 범위에 대한 정리 (3) | 2011/08/26 |
아이폰에 이어 안드로이드까지 요즘 모바일 어플리케이션 개발이 대세인 듯합니다.
일단 기존 개발자들이 개발에 대한 접근이 쉽다는 장점이 있어 더욱 많아지는 것 같습니다.
아이폰의 경우, Objective-C라는 언어를 별도로 학습해야 하지만 안드로이드는 Java 기반 개발자들에게는 별 어려움 없이 적응 할 수 있기도 하죠.
실제로 자료를 보면 점차 안드로이드 점유율이 높아질 거라 예상하고 있기도 하네요.
저희도 개발하면서 느끼는 거지만 모바일 어플리케이션은 왠지 모르게 느리다는 느낌이 있습니다.
게임이나 내부에서 동작하는 어플리케이션은 조금 낫지만 서버를 접속해야 하는 경우에 특히 이런 경우가 많습니다.
아무래도 3G 네트워크 환경에서의 속도 때문인데요..
실제 개발할 때는 보통 WIFI 환경에서 개발을 진행하기 때문에 전혀 문제가 없어 보이지만,
사용자들은 대부분 이동중에 스마트폰을 보는 경향이 있어 3G 환경이 많기 때문이죠..
3G 환경에서의 네트워크 속도는 제가 예전에 올린 다음 글을 참고하시면 될 것 같습니다.
2011/09/05 - [프로그래밍] - 3G 네트워크의 속도를 알아보자.
그러면 과연 모바일 어플리케이션의 속도를 향상시키기 위해서는 어떻게 해야 할까요?
제 나름대로의 관점(전지적 미니 시점?)에서 접근해 보면 다음 그림처럼 3가지 요소를 고려해야 한다고 봅니다.
한번 정리해 볼께요..
1. DB 최적화
기존 웹 사이트에서도 마찬가지지만 서비스의 성능에 가장 큰 영향을 주는 것이 바로 DB 입니다.
실제로 느린 사이트나 모바일 어플리케이션의 특징 중의 하나가 DB 최적화가 안되어 있다는 것이죠.
DB에서 Query를 하나 보냈는데 처리 시간이 1초 이상이 걸린다고 하면
당연히 사용자는 그만큼 오래 기다려야 하는 거겠죠..
DB 최적화에는 여러가지가 있습니다.
인덱스 구성을 최적화해서 Select 쿼리의 속도를 향상시키는 방법이 대표적이기도 한데요.
인덱스 라는 것이 Insert, Delete에 대해서는 반대로 속도를 떨어뜨리는 기능도 있기 때문에 적절한 설계가 필요하다고 봅니다.
또한 DB 자체의 설정을 통해 동시 접속 수를 어느 정도 설정하는 것도 필요하겠죠..
대부분 DB와 접속하기 위해 Web Server로 톰캣과 같은 WAS를 사용할 텐데요..
DB Connection Pool 관리도 중요한 내용이 되겠죠.
그래서 일단 모바일에서 접근하는 모든 쿼리를 0.1초 이내의 응답시간에 처리할 수 있도록 구성하면
DB 최적화는 어느정도 되었다고 할 수 있을 것 같습니다.
2. Web Server 최적화
Web Server 최적화라고는 했지만 실질적으로는 모바일 어플리케이션에 제공하는 데이터 양을 줄이라는 것에 가깝습니다.
XML이나 간단한 문자열로 전송 데이터를 설계해서 개발하면 되겠죠..
웹서비스를 이용하기 위한 SOAP 등도 활용할 수 있겠으나 부가 정보들이 추가되는 경향이 있어 별로 추천하고 싶지는 않습니다.
작은 용량이나마 낭비되는 것은 줄이는 것이 바람직하지 않을까 해서요~
또한 Web Server의 동시 접속자 수도 체크해야 겠죠..
많이 사용하는 Apache의 경우 동시접속자 수가 500인가로 기본값으로 설정되어 있었던 것 같습니다.
요즘 서버 성능이면 500 이상은 거뜬히 받아 들일 수 있기 때문에 이 값을 수정하는 것도 필요하겠죠..
3. 모바일 어플리케이션 자체 성능 향상
듀얼 코어 탑재 모바일 폰들이 나오고 있지만 아직도 PC에 비해 CPU 속도나 다른 성능이 떨어지는 것이 사실입니다.
여기에서 지도 보여주고, 카메라 증강현실 넣고, OpenGL 이용한 그래픽 이것 저것 넣으면
자체 속도도 많이 떨어집니다.
제가 생각하기에는 모바일 어플리케이션 하나에서 모든 것을 하려고 하면 안될 것 같습니다.
자신의 핵심 기능에 집중하고 사람들이 그 기능 때문에 사용하도록 해야지..
이것 저것 많이 넣어둔다고 더 많은 사용자들이 쓰는 것은 아닌 것 같습니다.
모바일 어플리케이션 관련해서 발표할 사항이 있어 해당 내용들을 정리하다가 블로그에도 올려봅니다.
주관적인 의견이기는 하지만 많이 참고하시기 바랍니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 컨텍스트 메뉴 만들기 (0) | 2011/09/30 |
|---|---|
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
| 모바일 어플리케이션의 성능 향상에 대해~ (0) | 2011/09/20 |
| 안드로이드 dp, sp 단위에 대한 정리 (2) | 2011/09/08 |
| 구글맵 라이선스의 무료 사용 범위에 대한 정리 (3) | 2011/08/26 |
| SKT T-Store App 소개 바로가기 URI (0) | 2011/08/25 |
기존의 웹에서는 텍스트나 이미지 크기를 나타낼 때 px(픽셀)을 주로 사용했습니다.
안드로이드 프로그래밍을 하면서 보면 여기에 dp와 sp라는 새로운 단위가 보입니다.
px: 픽셀(Pixels)
sp: Scale-independent pixel (scaled to relative pixel size on screen)
dp: Device-independent pixel
in: 인치(Inches - based on the physical size of the screen)
mm: 밀리미터(Milimeters - based on the physical size of the screen)
pt: 포인트(Points - 1/72 of an inch based on the physical size of the screen)
px은 화면 위의 점으로 디바이스의 DPI(Dots Per Inch)가 높이지면 1인치당 들어갈 수 있는 점의 수가 많아져 그림이 작아지게 됩니다. 기존의 웹에서 많이 사용하던 단위였죠..
sp는 사용자의 글꼴 크기 설정에 따라 크기가 조정될 수 있습니다. 그래서 스케일에 독립적인 픽셀이라는 겁니다.
즉, 동일한 디바이스에서도 25sp = 25px이 될 수도 있고, 25sp가 30px이 될 수도 있습니다.
안드로이드에서는 주로 텍스트의 크기에만 사용되고 있습니다.
dp는 디바이스에 독립적인 픽셀로서 어떤 화면 크기에서도 동일한 비율을 갖게 됩니다.
예를 들어, G1에서 320dp = 320px 값을 가지고 있습니다. 그러나 갤럭시S와 같은 경우에는 320dp = 480px을 갖게 되지요.
즉, 레이아웃에서 크기를 dp 단위로 설정한다면 디바이스에서의 실제 화면의 픽셀 크기를 고려하지 않고 프로그래밍을 할 수 있다는 겁니다.
결론적으로 안드로이드에서 크기 단위를 사용할 때, 다양한 크기의 디바이스를 고려한다면 px를 지양하고 dp를 사용해야 한다는 겁니다.
안드로이드 개발 문서에도 추후 나올 다양한 안드로이드 기기의 특징을 고려하여 dp와 sp를 사용하라고 이야기 하고 있네요.
그런데 또 다른 의견도 있습니다.
요즘 나오는 안드로이드 디바이스를 보면, 폰/태블릿등 다양하게 나오면서 동일한 해상도인데 DPI가 다른 것도 존재합니다.
즉, 이런 경우에는 오히려 dp로 작업함으로써 이미지 크기가 작게 보이는 문제가 발생할 수 있습니다.
dp를 기준으로 작업하고 각각의 dpi에 대해 최적화 할 것인가?
아니면 px을 기준으로 작업하고 각각의 해상도에 대해 최적할 것인가?
하는 문제는 결국 어플리케이션을 개발하고 설계하는 아키텍처의 몫이 아닌가 합니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
|---|---|
| 모바일 어플리케이션의 성능 향상에 대해~ (0) | 2011/09/20 |
| 안드로이드 dp, sp 단위에 대한 정리 (2) | 2011/09/08 |
| 구글맵 라이선스의 무료 사용 범위에 대한 정리 (3) | 2011/08/26 |
| SKT T-Store App 소개 바로가기 URI (0) | 2011/08/25 |
| HTC 히어로 한글 키보드 설치하기 (0) | 2011/08/24 |
웹에서 뿐만 아니라 모바일에서도 구글맵을 사용하는 경우가 많이 있습니다.
개발하기도 편리하고 무료로 제공하기 때문이죠.
그런데 구글맵을 활용한 상용서비스를 준비하시는 분들은 항상 의문을 갖습니다.
과연 무료로 어디까지 사용할 수 있을까?
그래서 2011년 4월 업데이트된 Google Map/Google Earth API 이용약관과 FAQ를 기반으로 정리해 봤습니다.
FAQ 사이트는 http://code.google.com/intl/ko-KR/apis/maps/faq.html이며 한글로 잘 정리되어 있습니다.
1. 상업용에 구글맵을 무료로 사용할 수 있을까?
무료 영역에 구글맵을 표시한다는 전제 조건하에 유료 사이트나 어플리케이션에서도 구글맵을 사용할 수 있다고 합니다.
단, 다음과 같은 경우에는 Google Map API 고급형을 사용해야 한다고 합니다.
- 유료 고객만 사이트를 사용할 수 있는 경우.
- 회사나 인트라넷 안에서만 사이트에 엑세스 할 수 있는 경우.
즉, 유료 고객만 사용하거나 인트라넷과 같이 폐쇄적으로 접근할 수 있는 경우에는 고급형이라고 하는 비용을 지불하고 사용해야 합니다.
2. 트래픽 제한이 있을까?
구글맵을 사용할 경우 일일 트래픽 제한과 관련된 궁금증도 많은 것 같습니다.
어떤 곳에서는 1일 1만5천건의 제한이 있다고 하는데요.. FAQ를 살펴보면 사이트에서 지도 페이지뷰의 수에는 제한이 없다고 나옵니다.
다만, 일일 500,000 페이지 뷰 이상일 경우에는 트래픽 처리를 위한 추가 용량을 준비할 수 있도록 Google에 연락달라는 멘트가 있습니다. (고급형을 사용하라는 이야기는 없네요.)
그러나 이 트래픽은 웹뷰의 형태로 제공하는 것이기 때문에 제한이 없는 것 같구요.. 좌표값을 보내서 주소를 받는 경우에는 일부 제한이 있는 것 같습니다. 이러한 것을 지오코딩 요청이라고 하는데요.
24시간 동안 한 IP 주소에서 2,500개를 넘거나 아주 짧은 시간에 많은 양의 지오코딩 요청이 있으면 상태코드 620으로 응답해서 처리가 안된다고 하네요.
3. 추적 어플리케이션(네비게이션 등)에서 구글 맵을 사용할 수 있을까?
이용약관을 준수한다면 이라는 문구가 포함되어 있지만 무료로 사용할 수 있다고 합니다.
즉, 구글 맵을 사용해서 실시간 데이터를 표시하거나 추적하는데 아무런 제한이 없다고 하네요.
다만, 내부에서만 사용하는 어플리케이션에서는 Google Map 고급형을 사용하라고 나옵니다.
종합해보면, 상업적이든 비상업적이든 폐쇄적으로만 사용하지 않으면 현실적으로 구글맵을 무료로 사용하는데 큰 제약이 없습니다. 그리고 고급형을 사용할지 여부는 개발자나 회사가 스스로 판단하는 것 같습니다.
구글이 취할 수 있는 조치는 언제든지 일시 중지하거나 종료할 수 있다는 겁니다.
무료로 사용할 경우, 구글이 서비스를 중지해버리면 나감해지기는 하겠죠..
구글 나름대로 최선의 대응책을 가지고 있는 셈입니다. -.-
주변에서 은근히 구글맵과 관련된 라이선스에 대해 물어보시는 분이 많아서 한번 정리해봤습니다.
참고로 고급형을 사용하려면 구글에 문의하라고만 되어 있습니다.
여기저기 사이트를 보니 연간 1만불 정도라고 하는데 확실하지는 않네요.
도움이 좀 되었으면 합니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
|---|---|
| 모바일 어플리케이션의 성능 향상에 대해~ (0) | 2011/09/20 |
| 안드로이드 dp, sp 단위에 대한 정리 (2) | 2011/09/08 |
| 구글맵 라이선스의 무료 사용 범위에 대한 정리 (3) | 2011/08/26 |
| SKT T-Store App 소개 바로가기 URI (0) | 2011/08/25 |
| HTC 히어로 한글 키보드 설치하기 (0) | 2011/08/24 |
안드로이드 마켓을 바로가기 위한 안드로이드 폰에서의 URI 형태는 다음과 같습니다.
id에 해당 어플의 패키지명을 적어주면 됩니다.
market://details?id=com.tgrape.android.radar
T-Store에도 이런 기능이 필요할 것 같은데요.
첨부한 파일을 보시면 두 가지 방식으로 처리할 수 있다고 되어 있습니다.
1. SKAF App인 T-Store MobileClient와 App의 collaboration 연동 규격
2. Web Browser 기반의 URI 연동 규격
첫번째 방법은 첨부 문서의 소스 코드를 참고하면 그리 어렵지 않게 구성할 수 있으니
여기에서는 두 번째 URI 규격에 대해서만 간단하게 정리해 볼께요.
기본적인 URI/URL 형태는 다음과 같습니다.
tstore://PRODUCT_VIEW/0000116581/0
0000116581은 App에 대한 PID로서 T-Store에서 쉽게 확인할 수 있습니다.
마지막에 있는 숫자는 이용 가능한 나이를 표시하는 거라고 하네요.
0 - 전체 이용가
1 - 12세 이용가
2 - 15세 이용가
4 - 청소년 사용불가
이외에도 검색 관련된 URI도 있으니 첨부 문서를 참고하시기 바랍니다.
첨부 문서는 T-Store 개발자 센터에서 가져온 자료입니다.
생각보다 이 자료를 찾는데 시간이 많이 걸리더라구요.
많은 개발자들이 이용할 수 있도록 공유해 봅니다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
| 안드로이드 옵션 메뉴 만들기 (0) | 2011/09/29 |
|---|---|
| 모바일 어플리케이션의 성능 향상에 대해~ (0) | 2011/09/20 |
| 안드로이드 dp, sp 단위에 대한 정리 (2) | 2011/09/08 |
| 구글맵 라이선스의 무료 사용 범위에 대한 정리 (3) | 2011/08/26 |
| SKT T-Store App 소개 바로가기 URI (0) | 2011/08/25 |
| HTC 히어로 한글 키보드 설치하기 (0) | 2011/08/24 |
SKT_ShopClient_Android_App_연동규격서_20101010.pdf

