일단 위젯에 사용될 버튼을 만드셔야 합니다.
이렇게 두개의 버튼을 위젯에 만들 예정입니다.
일단 위젯을 만들기 위해서 위의 두 이미지를 'drawable' 폴더로 복사합니다.
이렇게 하면 id값이 생성 됩니다.
그리고 'laout' 폴더에 widget xml 파일을 생성합니다.
여기서 'torch_widget.xml' 이라고 만들었습니다.
layout 속성은 적당히 만드시는데 위에 글에서 언급했듯이 widget 에서는 지원하는 layout이
몇가지 없으니까 선택해서 만드시면 됩니다.
그리고 위의 두 버튼을 'imageView'를 통해서 불러 옵니다. 'button'으로 불러 오셔도 되는데
클릭시 이미지를 변경하기 위해서 저는 'imageView'로 불러 왔습니다.
-추가된 모습- |
이제 AppWidget Provider를 만들어야 합니다.
project에서 xml을 추가합니다.
이름은 원하는 이름을 넣으시면 되고요. 'Finish'를 눌러서 종료하시면
자동으로 'res/xml'에 만드신 xml 파일이 추가 되어 있는 걸 보실 수 있습니다.
이제 속성을 추가 해주셔 합니다.
'Min width' 와 'Min height' 이렇게 두개에는 'Widget'의 크기를 넣고, 'Inteial layout'에는
아까 생성한 'widget Layout' 연결해 줍니다.
이제 Manifest 입력합니다.
위젯을 등록하는 방법의 위의 그림을 보면 아실 수 있을 듯합니다.
Receiver를 추가 하고 Intent Fiter를 추가 한 후 APPWIDGET_UPDATE를 가지는 ACTION을
추가 합니다.
meta data를 추가 하고요 다음과 같이 속성을 정해 주시면 됩니다.
이제 Widget class를 작성해야 합니다. 위 사진에 보시면 'Receiver'에 빨간 x 표가 보이
실 겁니다. class파일이 없어서 그런 것입니다. 이제 'receiver'를 클릭해 보면
위와 같이 NAME에 빨간 X표가 딱 있습니다. 'Name'를 클릭하면 class를 입력하는 창이
뜹니다.
여기서 주의 점 꼭 Superclass를 android.appwidiget.AppWidgetProvider
라고 입력하셔야 합니다.
이제 코딩만 남았습니다.
package com.android.newtorchlight;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.RemoteViews;
public class TorchWidgetClass extends AppWidgetProvider {
private RemoteViews views;
private ComponentName flashWidget;
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)){
Bundle extras = intent.getExtras();
if(extras != null){
int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
if(appWidgetIds != null && appWidgetIds.length > 0){
this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
}//end if
}//end if
}else if(AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)){
Bundle extras = intent.getExtras();
if(extras != null && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_ID)){
final int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
this.onDeleted(context, new int[]{ appWidgetId});
}//end if
}else if(AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)){
this.onEnabled(context);
}else if(AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)){
this.onDisabled(context);
}
super.onReceive(context, intent);
}//end onReveive
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
flashWidget = new ComponentName(context, TorchWidgetClass.class);
views = new RemoteViews(context.getPackageName(), R.layout.torch_widget);
appWidgetManager.updateAppWidget(flashWidget, views);
}//onUpdate
}//end TorchWidgetClass
위와 같이 하시면 짜짠~~~~ 위젯이 뜨는게 보이실 껍니다.
댓글 없음:
댓글 쓰기