2011-02-07 4 views
3

앱의 데이터베이스가 변경되면 업데이트해야하는 appwidget을 생성하고 있습니다. 내가 무엇을 : 1. 위젯을 2. 재정의 onReceive 방법 작업 만들기 : AndroidManifest를에서업데이트 안드로이드 위젯에 sendBroadcast 사용하기

public static final String DATABASE_CHANGED = " utimetable.DATABASE_CHANGED"; 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    String action = intent.getAction(); 
    if (action.equals(DATABASE_CHANGED) || action.equals(Intent.ACTION_DATE_CHANGED)) 
    { 
     AppWidgetManager gm = AppWidgetManager.getInstance(context); 
     int[] ids = gm.getAppWidgetIds(new ComponentName(context, widget_provider.class)); 
     this.onUpdate(context, gm, ids);    
    } 
    else 
    { 
     super.onReceive(context, intent); 
    } 
} 
  1. :

    <receiver android:name=".widget_provider" android:label="@string/widget_today_name"> 
        <intent-filter> 
         <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
         <action android:name="utimetable.DATABASE_CHANGED" /> 
         <action android:name="android.intent.action.DATE_CHANGED" /> 
        </intent-filter> 
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_row" /> 
    </receiver> 
    
  2. 이 방송은 모든 DB 변경 기능으로 보내기 추가

    public static void sendUpdateIntent(Context context) 
    { 
        Intent i = new Intent(context, widget_provider.class); 
        i.setAction(widget_provider.DATABASE_CHANGED); 
        context.sendBroadcast(i); 
    } 
    

그러나 데이터베이스를 변경하면 위젯이 업데이트되지 않습니다. 어떻게해야합니까?

답변

2

당신의 코드를보고 추측,하지만 첫 번째 후 그 공간은 "

.... DATABASE_CHANGED = " utimetable.DATABASE_CHANGED"; 
+0

보인다 바로 ... 그러나 한 가지 더, 어쩌면 내가, 활동을 위해 만든 텐트와 혼합거야하지만 한 번 잘못 보인다 당신은 '새로운 인 텐트 (context, widget_provider.class);'라고 씁니다. 당신은 그 의도를 widget_provider 클래스에게 보낼 것입니다 ... 그것을 제거하고 사용하려고 시도하십시오 : new Intent (widget_provider.DATABASE_CHANGED); – codeScriber

+0

좋은 지적 ... 그 첫 번째 실수 이후에 나는 더 이상 읽지 못했습니다 :-). 또 다른 방법은 의도를 보내지 않고 대신 remoteviews를 업데이트하는 것입니다. – SteelBytes

+0

나에게 수치 스러웠습니다! :) 도움이되었습니다. 두 가지 수정. 감사합니다! – skkap

관련 문제