반응형

손전등 어플은 최신 핸드폰(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 입니다.

 

 

 

여기까지의 소스를 올려드립니다.

 

 

 

FlashWidget_Toggle.zip
다운로드

 

 

 

 

 

 

반응형

+ Recent posts