2011-10-27 4 views
0

처음 간단한 위젯을 만들고 있는데, 위젯 팝업 목록에서 LogCat이 "Error appating AppWidget"을 표시하기 때문에 사용하고있는 튜토리얼에서 누락 된 것이 있습니다.AppWidget을 부 풀리는 동안 오류가 발생했습니다.

튜토리얼에 따르면 나는 이것을했다.

레이아웃 :

<TextView android:id="@+id/widget_textview" android:text="@string/widget_text" 
    android:layout_height="wrap_content" android:layout_width="wrap_content" 
    android:layout_gravity="center_horizontal|center" 
    android:layout_marginTop="5dip" android:padding="10dip" 
    android:textColor="@android:color/black" /> 
</LinearLayout> 

등급 :

package hello.widget; 

import android.appwidget.AppWidgetProvider; 

public class HelloWidget extends AppWidgetProvider { 
} 

문자열 :

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">Hello Widget</string> 
    <string name="widget_text">Hello Widget!</string> 
</resources> 

위젯 제공 :

<?xml version="1.0" encoding="utf-8"?> 
appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"> 
    android:minWidth="146dip" 
    android:minHeight="72dip" 
    android:updatePeriodMillis="10000" 
    android:initialLayout="@layout/main" 
</appwidget-provider> 

매니페스트 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="hello.widget" android:versionCode="1" android:versionName="1.0"> 
<uses-sdk android:minSdkVersion="3" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

    <!-- Broadcast Receiver that will process AppWidget updates --> 
    <receiver android:name="hello.widget.HelloWidget" 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/hello_widget_provider" /> 
    </receiver> 

    </application> 
</manifest> 

답변

1

당신은 당신의 레이아웃 파일의 구멍 <LinearLayout> 누락되었습니다. 여기에있는 것은 컴파일하지 않아야합니다.

AppWidgetProvider의 전체 구현이 누락되었습니다. 앱 위젯을 표시 할 내용을 지정하려면 onUpdate()을 구현해야합니다.

또한 updatePeriodMillis은 허용되는 것보다 짧습니다. 이렇게하면 10 초마다 앱 위젯을 업데이트 할 수 없습니다.

또한 레이아웃 이름이 main.xml인지 확인하거나 android:initialLayout을 업데이트하여 레이아웃의 적절한 이름을 반영하십시오.

+0

안녕, 도움을 주셔서 감사합니다. 이제 시작되었습니다. –

1

내 솔루션 :

public void onReceive(Context context, Intent intent) 
{ 
    String action = intent.getAction(); 

    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) 
    { 
     long days = (((calendar.getTimeInMillis()- date1.getTime())/1000))/86400; 
     RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); 

     //Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.android.alarmclock", "com.android.alarmclock.AlarmClock")); 
     // PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, AlarmClockIntent, 0); 
     Intent Date_Change= new Intent(Intent.ACTION_DATE_CHANGED); 
     PendingIntent pendingIntent2=PendingIntent.getActivity(context,0, Date_Change, 0); 

     views.setOnClickPendingIntent(R.id.textView1, pendingIntent2); 
     views.setTextViewText(R.id.textView1,""+days); 

     //views.setOnClickPendingIntent(R.id.AnalogClock, pendingIntent); 

     //AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views); 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
     ComponentName thisWidget = new ComponentName(context, Widget.class); 
     appWidgetManager.updateAppWidget(thisWidget, views); 
    } 
} 
+0

코드 샘플을 보내 주셔서 감사합니다. :-) –

관련 문제