2011-01-16 2 views
4

Ich teste ein einfaches Widget in Android und benutze Alarme, um ein TextView in regelmäßigen Abständen zu aktualisieren. Das Problem ist, dass ich in der BroadcastReceiver-Klasse nicht auf das TextView-Element zugreifen kann, das nach Ablauf des Alarms aktualisiert werden soll. Die Klasse wird richtig aufgerufen, weil der Toast, den ich dort hingelegt habe, die entsprechende Nachricht gibt. Der folgende Code stammt aus der Klasse, in der ich das Widget konfiguriere und die Timer einstelle.So greifen Sie auf ein TextView-Element in einem BroadcastReceiver zu

public void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 

    Intent intent = getIntent(); 
    Bundle extras = intent.getExtras(); 
    if(extras != null){ 
     mWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(WidgetConfigure.this); 
     RemoteViews views = new RemoteViews(WidgetConfigure.this.getPackageName(), R.layout.widget_layout); 
     views.setTextViewText(R.id.quote, "Widget Loaded From Activity"); 
     appWidgetManager.updateAppWidget(mWidgetId, views); 

     setTimer(); //set the timers... 
     setResult();// set the result... 
    } 
} 

Jetzt möchte ich die gleiche TextView aktualisieren, wenn der BroadCastReceiver aufgerufen wird, nachdem der Timer abläuft. Ich habe den Code versucht, der im BeispielAppWidget-Beispiel zur Verfügung gestellt wurde, das in android API-Demos zur Verfügung gestellt wird und das nicht ausarbeitet. Wie kann ich den gewünschten Text einstellen?

Antwort

11

Sie können in einer Aktivität von einem BroadcastReceiver nicht direkt etwas ändern. Denn wenn ein Broadcast-Empfänger angerufen wird, ist die Aktivität möglicherweise nicht vorhanden. Sie können Nachrichten an eine Aktivität senden (wenn die Aktivität vorhanden ist), oder wenn die Aktivität nicht, dass Sie es nicht gibt beginnen und einige Flags in Intent setzen

Update: Hier ist eine hässliche Art und Weise:

class YourActivity extends xxxx { 
    private static YourActivity mInst; 

    public static YOurActivity instance() { 
      return mInst; 
    } 

    /// Do your task here. 
    public void setViewText(xxxx) ; 

    @Override 
    public void onStart() { 
    ... 
    mInst = this; 
    } 

    @Override 
    public void onStop() { 
    ... 
    mInst = null; 
    } 
} 

Und in Ihrem BroadcastReceiver:

YOurActivity inst = YOurActivity.instance(); 
    if(inst != null) { // your activity can be seen, and you can update it's context 
     inst.setViewText... 
    } 
+0

ich möchte die gleiche Tätigkeit nennen, die oben erwähnt wird (was auch den Alarm setzt), aber eine andere Methode darin einen anderen Text in der Textview-Element zu setzen. SO muss ich wissen, wie ich diese Aktivität vom BroadcastReceiver aufrufen kann. – ric03uec

+0

chek mein Update. Wiederum ist eine Aktivität und ein Rundfunkempfänger unabhängig. Wenn Ihr Empfänger angerufen wurde, ist die Aktivität möglicherweise nicht vorhanden. Sogar die Übertragung wird in der Aktivität erstellt. –

+0

thanx a lot..that es gelöst – ric03uec

Verwandte Themen