안드로이드 배터리 잔량 구하기

Intent.ACTION_BATTERY_CHANGED는 Sticky Intent로 시스템에 등록되어 있어서 registerReceiver()를 호출하면 즉시 반환됩니다. 반환된 Intent에서 필요한 값을 추출해 배터리 잔량을 %로 계산해 반환하는 메서드입니다.

public static int getBatteryPercentage(Context context) {
    Intent batteryStatus = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
    int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

    float batteryPct = level / (float)scale;
    return (int)(batteryPct * 100);
}

옵티머스Z를 선택한 이유

아이폰4로 시끌벅적한 요즘입니다. 쌩뚱맞게도 저는 옵티머스Z를 선택하여 사용한지 2주 정도되었습니다. 나름의 기준에 따라 신중하게 선택하였기에, 만족하며 잘 사용하고 있습니다. 

제가 옵티머스Z를 선택한 이유는 다음과 같습니다. 
1. 디자인 
안드로이드 버전이 같다면 일반적인 용도로 판단해 보건데 기능성은 거기서 거기라고 생각했습니다. 그리하여 디자인을 제일 먼저 따져보게 되었죠. 몇달 전에 회사 내에서 개발 중인 옵티머스Z를 보았습니다. 그당시에는 완성도가 떨어져서 그런지 몰라도, 그냥 그런 특색없는 폰이라고 생각했으나, 완성된 제품을 보니 느낌이 확 다르더군요! 사고싶다는 생각이 들정도로 마음에 드는 디자인이었습니다.
2. 크기 
3.5인치 액정에 대해서 대부분의 사람들이 요즘 추세에 비추어 봤을때 작다고 이야기 합니다만, 저는 이 크기가 주머니에 넣고 다니기에 부담이 없는 최적의 사이즈라고 생각합니다. 어차피 안드로이드폰의 해상도는 480 * 800으로 동일하기 때문에, 화면에 보이는 정보의 양은 3.5인치나 4.0인치나 같습니다. 결정적으로 저는 시력이 좋아서 해상도가 같다면 작은 화면을 선호합니다. 픽셀이 작은 쪽이 더 선명하거든요. 
3. T맵
3G망을 통해 실시간으로 교통정보를 반영하는 네비게이션에 대한 기대가 컸습니다. 기존에 사용하던 IQ500은 TPEG을 사용하여 실시간 교통정보를 반영한다고 하지만 정확도가 떨어지는 느낌을 많이 받았습니다. 이 항목은 옵티머스Z의 장점이라기 보다는 KT-아이폰 대비 SKT-안드로이드폰의 장점이라고 보는게 맞겠네요. 
4. 안드로이드
저는 안드로이드폰 개발자입니다. 안드로이드 UI에 훨씬 익숙하고, 안드로이드를 좋아합니다. 아이튠스를 사용하지 않아도 된다는 점, SD카드를 통해 자유롭게 데이터를 이동할 수 있다는 점, 바탕화면을 자유롭게 꾸밀 수 있다는 점, Java로 개발할 수 있다는 점 등등 때문에 아이폰OS보다 안드로이드를 좋아합니다. 참고로 저는 아이팟 셔플, 아이팟 터치, 맥북, 아이맥 구입 및 사용 경험이 있습니다. 결정적으로 저는 맥의 흐릿한 한글 폰트가 마음에 들지 않습니다. 
5. LG
타사제품을 써보는 것도 훌륭한 자사제품을 개발하는데 도움이 되는 방법 중에 하나가 될 수 있겠지만, 로열티 측면에서 자연스럽게 자사제품을 구입하게 되었습니다. 
정리해보면 옵티머스Z를 선택한 이유는 주로 ‘디자인’이였던 것 같네요. 2주 정도 사용해본 결과 소소한 버그를 발견하기도 하였으나, 그런대로 만족스럽게 잘 사용하고 있습니다. 기대했던 것보다 안정적으로 빠르게 동작합니다. 올해 말 프로요로 업데이트 되면 한층 더 좋아지겠죠!

난감한 Kandroid의 번역 센스

안드로이드폰 개발 프로젝트의 준비단계로, 요즘은 Kandroid 문서를 가지고 안드로이드 플랫폼을 공부하고 있습니다. Kandroid 문서는 Android Developers 사이트의 The Developer’s Guide를 한글로 번역하여 작성되었습니다. 

520 페이지에 달하는 이 문서를 1주일만에 마스터하는 스터디 일정을 소화하고 있는데, 자주 어이없는 번역체 문장에 좌절하곤 합니다.
다음과 같은 문장을 읽어 보시면, 

android:targetSdkVersion
– 애플리케이션이 실행되도록 계획된 API를 지정한다. 몇몇 경우에, 이것은 최초 API 레벨을 위해 정의된 것들만을 사용하는 것으로 제약되기보다는, 애플리케이션이 타켓 API 레벨에 정의된 매니페스트의 엘리먼트 또는 작동형태를 사용하는 것을 가능하게 한다.

무슨 이야기를 하는건지 이해하기 힘듭니다. 최초 API 레벨이 대체 뭘까요?
원문은 다음과 같습니다. 
android:targetSdkVersion — Specifies the API Level on which the application is designed to run. In some cases, this allows the application to use manifest elements or behaviors defined in the target API Level, rather than being restricted to using only those defined for the minimum API Level.

한글화 하느라 고생하신 분들의 노고는 인정하지만, 새로운 개념을 공부하는 사람의 입장에서는 읽기가 힘들어 아쉬움이 남습니다. 그래서 지금은 힘들더라도 아예 처음부터 영어로 읽고 있습니다. 
살인적인 스터디 일정으로 인하여 신입사원 3주차에 특근, 야근을 이어가고 있습니다. 새로운 분야에 대한 진입장벽이라고 생각하면 되겠지요. 덕분에 생활의 여유가 없긴해도, 뭔가 열심히 살고 있다는 생각에 뿌듯한 요즘입니다.