Android
widget app 요소
aucd29
2013. 10. 8. 14:53
1. Android widget 의 경우 Activity 를 상속 받지 않고 AppWidgetProvider 를 상속 받아서 생성해야 한다. 그리고 onUpdate 를 이용해 내용을 갱신 한다.
[code]
public class WatchWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews remoteViews;
ComponentName watchWidget;
DateFormat format = SimpleDateFormat.getTimeInstance(
SimpleDateFormat.MEDIUM, Locale.getDefault());
remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
watchWidget = new ComponentName(context, WatchWidget.class);
remoteViews.setTextViewText(R.id.widget_textview, "Time = " + format.format(new Date()));
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
}
[/code]
2. Activity 를 상속 받지 않았기 때문에 AndroidManifest.xml 에서는 activity 가 아닌 receiver 를 이용해 xml 를 구성해야 한다. 특이 점으로는 meta-data element 내에 android:resource attribute 의 값을 참조 하여 data refresh 값이나 widget size 등을 얻는 다는 것이다.
[code]<receiver android:name=".WatchWidget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/watch_widget_provider" />
</receiver>[/code]
3. resource 의 경우 다음과 같이 기입 하면 된다.
[code]<?xml version="1.0" encoding="utf-8" ?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="146dp"
android:initialLayout="@layout/main"
android:updatePeriodMillis="1000"
android:minHeight="144dp"/>[/code]
자세한 내용은 다음을 참조 한다. http://sarangnamu.net/basic/basic_view.php?no=4973
ps. widget 에서 event 를 처리하기 위해서는 AndroidManifest.xml 에 action 을 추가 하면 된다 가령 CLICK 이벤트를 하나 추가한다고 한다면은 아래와 같이 <action android:name="net.sarangnamu.widgetapp.widget.CLICK" /> 를 추가해주어야 한다.
[code]<receiver android:name=".WatchWidget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="net.sarangnamu.widgetapp.widget.CLICK" /> // 이런식
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/watch_widget_provider" />
</receiver>[/code]
action 이 추가 된 이후 event를 받기 위해서는 onReceive 를 Override 를 시키고 관련 작업을 추가 하면 된다.
[code]
public class WatchWidget extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews remoteViews;
ComponentName watchWidget;
DateFormat format = SimpleDateFormat.getTimeInstance(
SimpleDateFormat.MEDIUM, Locale.getDefault());
remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
watchWidget = new ComponentName(context, WatchWidget.class);
remoteViews.setTextViewText(R.id.widget_textview, "Time = " + format.format(new Date()));
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
}
[/code]
2. Activity 를 상속 받지 않았기 때문에 AndroidManifest.xml 에서는 activity 가 아닌 receiver 를 이용해 xml 를 구성해야 한다. 특이 점으로는 meta-data element 내에 android:resource attribute 의 값을 참조 하여 data refresh 값이나 widget size 등을 얻는 다는 것이다.
[code]<receiver android:name=".WatchWidget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/watch_widget_provider" />
</receiver>[/code]
3. resource 의 경우 다음과 같이 기입 하면 된다.
[code]<?xml version="1.0" encoding="utf-8" ?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="146dp"
android:initialLayout="@layout/main"
android:updatePeriodMillis="1000"
android:minHeight="144dp"/>[/code]
자세한 내용은 다음을 참조 한다. http://sarangnamu.net/basic/basic_view.php?no=4973
ps. widget 에서 event 를 처리하기 위해서는 AndroidManifest.xml 에 action 을 추가 하면 된다 가령 CLICK 이벤트를 하나 추가한다고 한다면은 아래와 같이 <action android:name="net.sarangnamu.widgetapp.widget.CLICK" /> 를 추가해주어야 한다.
[code]<receiver android:name=".WatchWidget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="net.sarangnamu.widgetapp.widget.CLICK" /> // 이런식
</intent-filter>
<meta-data android:name="android.appwidget.provider" android:resource="@xml/watch_widget_provider" />
</receiver>[/code]
action 이 추가 된 이후 event를 받기 위해서는 onReceive 를 Override 를 시키고 관련 작업을 추가 하면 된다.