손전등 어플은 최신 핸드폰(LED 플레시가 있는)에 기본 내장되는 기본적으로 제공하는 어플중에 하나입니다.
하드웨어 컨트롤 + 위젯 구성 + 이벤트 처리 등을 배우기 가장 좋은 예가 될수 있겠네요
우선 오늘은 플레시 실행에 앞서 토글 형태의 위젯을 만들어 보도록 하겠습니다. 기본적인 On/Off 기능의 토글만
원하는 것이므로 간단하면 간단할 수록 좋겠습니다.
제가 먼저 생각한것은 스위치(상하)형태의 위젯 아이콘이였는데요. 바로바로
On Off
위의 두 아이콘을 사용하기로 했습니다.
private static final String ACTION_FLASH_ON ="com.flash.widget.ON";
private static final String ACTION_FLASH_OFF ="com.flash.widget.OFF";
두 명시적 Intent를 사용해서
int flashControl = 0;
if(flashControl == 0){
views.setImageViewResource(R.id.flash_btn, R.drawable.off);
intent = new Intent(ACTION_FLASH_ON);
}else if(flashControl == 1){
views.setImageViewResource(R.id.flash_btn, R.drawable.on);
intent = new Intent(ACTION_FLASH_OFF);
}
Off 상태 : flashControl = 0
On 상태 : flashControl = 1
다음과 같이 설정하고 ImageView를 클릭에 의해 번갈아 주기로 했습니다.
아시겠지만 위젯의 대부분의 명령어 설정은 onUpdate에서 주로 해주는것이 좋고 실질적인 이벤트 코딩은 onReceive에서
실행해 주는것이 좋습니다.
각 이벤트의 실행은 onReceive에서 앞서 설정해준 명시적 Intent를 통해서
if(action.equals(ACTION_FLASH_ON)){
Log.e("Flash state", intent.getAction());
try{
flashControl = 1;
AppWidgetManager manager = AppWidgetManager.getInstance(context);
this.onUpdate(context, manager, manager.getAppWidgetIds(new ComponentName(context, FlashWidgetActivity.class)));
}catch (Exception e) {
// TODO: handle exception
Log.e("Flash state", "Flash ON Exception");
}
} ...
위와 같은 형식으로 이루어 지면 되겠습니다.
AppWidgetManager manager = AppWidgetManager.getInstance(context);
this.onUpdate(context, manager, manager.getAppWidgetIds(new ComponentName(context, FlashWidgetActivity.class)));
onUpdate에서 onReceive로 onReceive에서는 이벤트를 처리하고 onUpdate로 다시 아이콘을 갱신합니다.
그럼 한번 클릭마다 다른 이미지의 아이콘으로 바뀔 수 있겠네요
위젯의 크기는 1 * 1인 72dip * 72dip 입니다.
여기까지의 소스를 올려드립니다.
'Android' 카테고리의 다른 글
손전등(플레시) 위젯 어플 만들기 - 2(② LED 플레시 컨트롤) (1) | 2012.04.14 |
---|---|
안드로이드 단말기 정보 명령어 모음 (1) | 2012.04.08 |
안드로이드 효과음(SoundPool) (0) | 2012.04.02 |
안드로이드 센서 사용 모음 예제 (6) | 2012.04.01 |
Slot Machine 어플 만들기 (18) | 2012.03.31 |