2014년 3월 12일 수요일

[ANDROID CODE / 안드로이드]HOME SCREEN WIDGET SAMPLE CODE-> 스크린 위젯 따라하기

지나 글에 이어서 이번에는 천천히 따라할 수 있도록 만들어 볼 예정입니다.

일단 위젯에 사용될 버튼을 만드셔야 합니다.



이렇게 두개의 버튼을 위젯에 만들 예정입니다.

일단 위젯을 만들기 위해서 위의 두 이미지를 '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


위와 같이 하시면 짜짠~~~~ 위젯이 뜨는게 보이실 껍니다.

댓글 없음:

댓글 쓰기