¾îÇõéÀ» º¸¸é À§Á¬µéÀ» Æ÷ÇÔÇÏ´Â °ÍµéÀÌ ¸¹½À´Ï´Ù.
±×·³ ¾Û°ú À§Á¬ÀÇ Â÷ÀÌ´Â ¹«¾ùÀΰ¡?
¾ÛÀÇ °æ¿ì ¾Èµå·ÎÀ̵忡¼ Çã¿ëµÇ´Â °ÅÀÇ ¸ðµç À§Á¬µéÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÇÏÁö¸¸ À§Á¬ÀÇ °æ¿ì Çã¿ëµÇ´Â À§Á¬µéÀÌ ÇÑÁ¤µÇ¾î ÀÖ½À´Ï´Ù.
¶ÇÇÑ ¾ÛÀÇ °æ¿ì Activity¶ó´Â °ÍÀ» ÀÌ¿ëÇؼ ȸ鿡 º¸¿©ÁÖ°í,
À§Á¬ÀÇ °æ¿ì ¾ÆÀÌÄÜÀÇ ÇüÅ·Πȸ鿡 º¸¿©ÁÝ´Ï´Ù.
°¡Àå Å« Ư¡ÀÌÀÚ ÀåÁ¡ÀÌÁÒ.
±×·³ Activity¿¡¼ ¸»ÇÏ´Â À§Á¬°ú À§Á¬¿¡¼ ¸»ÇÏ´Â À§Á¬ÀÇ Â÷ÀÌÁ¡Àº ¹«¾ùÀΰ¡?
°°½À´Ï´Ù. À§Á¬Àº ¿ÀÁ÷ ÇϳªÀÇ ±â´É¸¸ ¼öÇàÀÌ °¡´ÉÇÕ´Ï´Ù.
¿¹¸¦µé¸é Activity¿¡¼ ¹öÆ° À§Á¬Àº ¹Ýµå½Ã Ŭ¸¯±â´É¿ÜÀÇ ´Ù¼ö ±â´ÉÀ» Æ÷ÇÔ ¸øÇÕ´Ï´Ù.
¿ª½Ã À§Á¬¿¡¼µµ ¹öÆ°Àº ¹Ýµå½Ã Ŭ¸¯±â´É¿ÜÀÇ ´Ù¼ö ±â´ÉÀ» Æ÷ÇÔ ¸øÇÕ´Ï´Ù.
¿ä¾àÇÏÀÚ¸é ¿ì¸®°¡ Á¦ÀÛÇÏ·Á´Â À§Á¬Àº ÀÌ·± ÀÛÀº ¾ÆÀÌÄÜ°°Àº ³ðµéÀ»
¹ÙÅÁȸ鿡¼ ActivityÀÇ µµ¿ò¾øÀÌ °³º°ÀûÀ¸·Î ¼öÇà°¡´ÉÇÏ°Ô ¸¸µéÀÚ´Â°Ô ÃëÁö ÀÔ´Ï´Ù.
ÀÌ·± À§Á¬Àº ÀÛÀºÈ¸é¿¡ ´Ù¾çÇÑ ³»¿ëÀ» ³ÖÀ» ¼ö Àֱ⠶§¹®¿¡ »ç¿ëÀÚ°¡ ±ÍÂú°Ô µû·Î ½ÇÇàÇÏÁöµµ ¾Ê¾Æµµ
¹ÙÅÁÈ¸é¼ ±¸µ¿ÀÌ µÇ±â¶§¹®¿¡ »ó´çÈ÷ À¯¿ëÇÕ´Ï´Ù.
±×·³ À§Á¬À» °£´ÜÈ÷ Á¦ÀÛÇغ¸µµ·Ï Çغ¼±î¿ä?
¿ì¼± À§Á¬À» ¸¸µé±âÀ§ÇØ Å¬·¹½º´Â AppWidgetProvider¸¦ extends ÇØÁÖ¾î¾ßµË´Ï´Ù.
Ãß°¡·Î À̳ðÀº ¸®½Ã¹öÀ̱⠶§¹®¿¡ ±×³É ÀÎÅÙÆ®µµ ¾È¾²°í PendingIntent¸¦ »ç¿ë ÇÕ´Ï´Ù.
±×·³ À§¿¡¼ ¸»ÇÑ Çã¿ëµÈ À§Á¬Àº ¹«¾ùÀ̳Ä?
1. LinearLayout
2. RelativeLaout
3. FrameLayout
4. AnalogClock
5. Button
6. ImageButton
7. ImageView
8. ProgressBar
9. TextView
¹¹ Google°Ë»öÀº EditText¾²Áö ¾Ê´À³Ä?
¶ó°í Áú¹® µé¾î¿Ã ¼ö Àִµ¥¿ä, ±×°Å ±×¸²ÀÔ´Ï´Ù.
¸®´Ï¾î ·¹À̾î¾Æ¿ô + À̹ÌÁöºä
±×·³ Á¶¸£Å×´Â ¹¹³Ä? Å×ÀÌºí °°Àº°Å³ª¿ÀÁö¾Ê´À³Ä?
¾Æ´Õ´Ï´Ù.
ÅؽºÆ®ºäÀÔ´Ï´Ù.
¿©Æ° À§ÀÇ °ÍÀ¸·Î ÇÑÁ¤µÇ¾î Àֱ⠶§¹®¿¡
Àß¼±ÅÃÇϼż »ç¿ëÇϼžߵ˴ϴÙ.
À̹ø°ÀÇ¿¡¼´Â °£´ÜÇÏ°Ô ±×¸²¸¸ µé¾î°¡´Â À§Á¬À» ¼³¸íÇϵµ·ÏÇÏ°Ú½À´Ï´Ù.
¿ì¼± ·¹À̾ƿôÀÎ Xml
<res/layout>
<main_lay.xml>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<LinearLayout
android:background="#ffffff"
android:id="@+id/linearLayout1" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_width="wrap_content">
<ImageView android:layout_width="wrap_content" android:id="@+id/imageView1" android:layout_height="wrap_content" android:src="@drawable/icon"></ImageView>
</LinearLayout>
</LinearLayout>
¿ì¼± ÀÏ¹Ý Activity¿Í °°½À´Ï´Ù.
´Ü, ¿©±â¼ ÇϳªÀÇ À§Á¬¿¡ ¿©·¯°¡ÁöÀÇ °ÍµéÀ» ¶ç¾îÁÖ°í½ÍÀ¸½Ã´Ù¸é, ¸®´Ï¾î·¹À̾ƿô°°Àº
°ÑÅ׵θ®¸¦ µÑ·¯½Î½Ã°í ¸®´Ï¾î·¹À̾ƿôÀ» ÀÎÇ÷¹ÀÌÅÍÇؼ ÀڽݴüµéÀ» »ó¼Ó½ÃÄѾߵ˴ϴÙ.
¹¹ Àú´Â ¿©±â¼ À̹ÌÁöºäÇϳª¸¸¶ç¿ï°Å´Ï..
À§¿Í °°ÀÌ ¼±¾ðÇϼÌÀ¸¸é ÀÌÁ¨, À̳ðÀÇ Å©±â¸¦ Á¤ÀÇÇÏ°í À§Á¬ÀÇ Á¤º¸¸¦ °°´Â xmlÆÄÀÏÀ» ¸¸µé¾î¾ß
µË´Ï´Ù. 5ÁÙ¹Û¿¡¾ÈµË´Ï´Ù.
<res/xml>
<main.xml>
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android ="http://schemas.android.com/apk/res/android"
android:minWidth="144dp"
android:minHeight="72dp"
android:initialLayout="@layout/main_lay"/>
minwidth¿Í minHeight´Â À§Á¬ÀÇ ½ÇÁ¦ Å©±â¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
¾Èµå·ÎÀÌµå ±âÃÊ°ÀǵéÀ» º¸½Ã¸é À§Á¬ÀÇ Å©±â¸¦ Á¤¼ö·Î¼ Á¤ÇÒ ¼öµµ Àִµ¥¿ä,
ȸé»çÀÌÁ ¾îÂ÷ÇÇ 16µîºÐ.. ¾Æ µîºÐÀº¾Æ´Ï±º¿ä ¼¼·Î°¡ ´õ±æÀ¸´Ï±î
¿©Æ° 16°³·Î ³ª´©´Âµ¥, ÀÌ°É»ý°¢ÇϼżÇصµµÇ±¸¿ä.
¾ÆÂü°í·Î ¸»¾¸µå¸®ÀÚ¸é À§Á¬ÀÇ Å©±â´Â
1*1, 1*2, 1*3, 1*4 | 2*1, 2*2, 2*3, 2*4
3*1, 3*2, 3*3, 3*4 | 4*1, 4*2, 4*3, 4*4
ÀÌ·¸°Ô 16Á¾·ù°¡ ÀÖ½À´Ï´Ù. »ç°¢ÇüÀ¸·Î¹Û¿¡ ±¸ÇöÀ» ¸øÇÏ´Ï Âü°íÇϽñ⠹ٶø´Ï´Ù. ¤¡ ¤¤ ¤§ ¤±
¤· ¤» ¤¼ ¤µ µî..
ÀÌ·±¸ð¾çÀº ¸ø¸¸µì´Ï´Ù.
±×·³ ÀÌÁ¦ º»°ÝÀûÀ¸·Î ¸ÞÀμҽº.
<src/com.corea.widgetTest>
<WidgetTest.java>
public class WidgetTest extends AppWidgetProvider
{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// TODO Auto-generated method stub
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int i=0; i<appWidgetIds.length; i++)
{
int widgetId = appWidgetIds[i];
RemoteViews remoteView = new RemoteViews(context.getPackageName(),R.layout.main_layout);
appWidgetManager.updateAppWidget(widgetId, remoteView);
}
}
ÀÚ ¿©±â¼ óÀ½ º¸½Ã´Â °ÍµéÀÌ ¸î °³ º¸ÀÔ´Ï´Ù.
RemoteViews ¿Í AppWidgetManager µÎ°¡Áö³×¿ä
°£´ÜÇÏ°í °£·«ÇÏ°Ô ¼³¸íÇÏÀÚ¸é
RemoteViews´Â À§Á¬À» º¸¿©ÁÖ°ÔÇÏ´Â Çã¿ëÁ¦ÇÑÁ¶°ÇÀ» °É¾î¹ö¸®´Â ³ðÀÔ´Ï´Ù.
À̳ðÀÌ ÀÖ¾î¾ß ¹ÙÅÁȸ鿡 À§Á¬ÀÌ µî·ÏµË´Ï´Ù.
À̳ðÀº ActivityÀÇ setContentView()¿Í µ¿ÀÏÇѱâ´ÉÀ» Çϴ³ðÀε¥ ±ÍÂú°Ô
°æ·Î¸¦ Àâ¾ÆÁà¾ßµË´Ï´Ù.
ÀÏ´Ü ÆÐÅ°Áö³×ÀÓÀ» Àâ°í, µÚ¿¡ ·¹À̾ƿôÀ̸§À» ºÙÀÔ´Ï´Ù.
±×·³ ¿Ö ¿©±â¿¡ ±¸Áö ÆÐÅ°Áö³×ÀÓÀ» ºÙÀ̳Ä?
À§Á¬Àº ÇϳªÀÇ ÆÐÅ°Áö·Î ±¸¼ºµÉ¼öµµ ÀÖ°í, ÇϳªÀÇ À§Á¬¿¡ ¿©·¯°³ÀÇ ÆÐÅ°Áö°¡ ºÙ¾î¼
ÇϳªÀÇ À§Á¬À» ±¸¼ºÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
¹¹ °¡Àå ÈçÇÑ¿¹´Â Ä«¸Þ¶ó À§Á¬À̱º¿ä.
Ä«¸Þ¶ó À§Á¬Àº ¹ÙÅÁȸ鿡¼ Ä«¸Þ¶ó È»óÀ» º¸¿©ÁÖ°í, °ÑÀº ¶Ç ´Ù¸¥ ·¹À̾ƿôÀ¸·Î °¨½Î°í
±× ·¹À̾ƿôÀº ´Ù¸¥±â´ÉÀ» ¼öÇàÇÕ´Ï´Ù.
ÀÌó·³ ÇϳªÀÇ À§Á¬ÀÌ ¿©·¯°³ÀÇ ±â´ÉÀ» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇÏ·Á¸é ¿©·¯°³ÀÇ ÆÐÅ°Áö¸¦
»ç¿ëÇؾߵ˴ϴÙ.
¾Æ ±×¸®°í ¿©·¯°³ÀÇ ±â´ÉÀ» »ç¿ëÇϽ÷Á¸é
intent-filter¿¡´Ù°¡ ¾×¼ÇÁ¤ÀÇÇØÁֽøéµË´Ï´Ù.(¾×¼ÇÁ¤ÀǵÇÀÕ´Â ÆÐÅ°Áö³×ÀÓ¼ÁֽøéµÊ)
±×·³ AppWidgetManager´Â ¹¹³Ä?
³× ÀÌ°Ç À§Á¬ÀÇ ÀüüÀûÀÎ »óÅ°ü¸®¸¦ ÇØÁÖ´Â ³ðÀÔ´Ï´Ù.
À̳ðÀº ¿©·¯°³ÀÇ À§Á¬À» ¹ÙÀεù °¡´ÉÇÏ°í(¿©·¯ À§Á¬¹öÆ°À̳ª ¾ÆÀÌÄܵéÀ» Çϳª·Î¹¾î¹ö¸²)
À§Á¬ÀÇ ¾ÆÀ̵𸦠ºÒ·¯¿Ã ¼ö ÀÖÀ¸¸ç,(getAppWidgetIds)
À§Á¬À» ¾÷µ¥ÀÌÆ®°¡ °¡´ÉÇÏ°í,(updateAppWidget)
À§Á¬À» ¹ÙÅÁȸ鿡 ¼ÂÆÃÇÒ¶§ÀÇ »óŸ¦ ¹Þ¾Æ¿À°í(ACTION_APPWIDGET_CONFIGURE)
¹Ý´ë·Î ¾ø¾Ù ¶§ÀÇ »óŸ¦ ¹Þ¾Æ¿Ã ¼ö ÀÖ½À´Ï´Ù.(ACTION_APPWIDGET_DELETED)
±âŸ ¸î°¡Áö ±â´ÉµéÀÌ ÀÖÁö¸¸ ÁßÁ¡ÀûÀ¸·Î »ç¿ëÇÏ´Â°Ç À§ÀÇ 4°¡Áö ÀÔ´Ï´Ù.
±×°Í ¿Ü¿¡´Â Ưº°ÇÑÁ¡Àº µüÈ÷ ¾ø°í BroadCastReciver¸¦ ¾Ë°í °è½Ã´Â ºÐµéÀ̶ó¸é
PendingIntent¸¦ ¾Ë°í °è½Ç °Ì´Ï´Ù.
À̳𵵠"¸®½Ã¹ö"À̱⠶§¹®¿¡ PendingIntent·Î °ªÀ» º¸³»°í, ¾×ƼºñƼ¸¦ ¶ç¿ì°í ÇÕ´Ï´Ù.
Âü°íÇϽñæ..
ÀÚ±×·³ ¸¶Áö¸· ¸Þ´ÏÆ佺Ʈ ¼³Á¤
<AndroidManifest.xml>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="
http://schemas.android.com/apk/res/android"
package="com.corea.wigetTest"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" >
<receiver android:name=".WigetTest" 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/main"
/>
</receiver>
<receiver android:name=".WidgetTest_two" android:label="@string/app_name2">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name = "android.appwidget.provider"
android:resource="@xml/main"
/>
</receiver>
<receiver android:name=".WidgetTest_three" android:label="@string/app_name3">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name = "android.appwidget.provider"
android:resource="@xml/main"
/>
</receiver>
<receiver android:name=".WigdetTest_four" android:label="@string/app_name4">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
<meta-data android:name = "android.appwidget.provider"
android:resource="@xml/main"
/>
</receiver>
</application>
</manifest>
±æ±º¿ä...
¾î? ÇϳªÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç ¾È¿¡ Reciver¸¦ ¿©·¯°³ µÎ¾ú³×¿ä?
³×, ¿ä°Ç ÀÀ¿ëÀä..
°°Àº ±â´ÉÀ» ¼öÇàÇÏ´Â À§Á¬ÀÇ Å©±â¸¸À» º¯°æÇϴ°ÍÀ» ¿©·¯°³ µî·ÏÀ» ÇÏ°í ½ÍÀ»¶§
À§¿Í °°Àº ¹æ½ÄÀ¸·Î µî·ÏÇÏ½Ã¸é µË´Ï´Ù.
±¸Á¶´Â
¸®½Ã¹ö µî·ÏÇÏ°í(Widget)
Intent-filter·Î À§Á¬ Çൿ ³Ö¾îÁÖ°í
meta-data·Î À§Á¬ÀÇ Å©±â¸¦ Á¤ÀÇÇØÁÝ´Ï´Ù.
¿ä·ÎÄÚ·Ò 3°³¸¸ ÀÖÀ¸¸é µÇÁÒ.
Âü°í·Î ¿©·¯°³ÀÇ À§Á¬À» ¸¸µé·Á¸é ´ç¿¬È÷ xmlÆú´õÀÇ ¸ÞŸµ¥ÀÌÅÍ ÆÄÀÏ°ú layoutÆÄÀϵµ
±× ¼ýÀÚ¸¸Å Áõ°¡ÇØ¾ßµÇ´Â°Ç ´ç¿¬Áö»çÀÔ´Ï´Ù.
°í·³ À̸¸ ¿©±â¼ ±ÛÀ» ÁÙÀÌ°í.
ps. Á¦°¡ ½ºÄÉÁÙ·¯ ¼Ò½º ¿ÀÇÂÇÑ´Ù°íÇß¾ú´Âµ¥¿ä.
Á˼ÛÇÏÁö¸¸ 12¿ù´Þ¿¡ ¿ÀÇÂÇÏ°Ù½À´Ï´Ù. ^^; ´Ù¸¥ÀϵéÀÌ ¸¹´Ùº¸´Ï
¼Ò½ºÁ¤¸®µµ ¾ÈµÇ¾î ÀÖ°í, ³²µéÀÌ º¸±â¿¡ ¾î·Æ°í ´õ·´°í Â¥Áõ³¯ »ÓÀÌ´Ï Á» Á¤¸®Á» ÇÏ°í
¿Ã¸±²²¿ä
* ±ÛÀ» µî·ÏÇϽǶ§ ²À ÇÊ¿äÇÑ °æ¿ì°¡ ¾Æ´Ï¸é °³ÀÎÁ¤º¸¸¦ ³²±âÁö ¸¶¼¼¿ä ^^ (¿¬¶ôó,À̸ÞÀÏÁÖ¼Ò,Áֹεî·Ï¹øÈ£ µî)