2011-01-16 16 views
4

アンドロイドで簡単なウィジェットをテストし、アラームを使用して定期的にTextViewを更新しています。問題は、BroadcastReceiverクラスで、アラームが切れたときに更新したいTextView要素にアクセスできないということです。トーストは適切なメッセージを与えているので、クラスは適切に呼び出されています。次のコードは、私がウィジェットを設定してタイマーを設定したクラスのコードです。BroadcastReceiverのTextView要素にアクセスする方法

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... 
    } 
} 

ここで、タイマーの期限が切れた後にBroadCastReceiverが呼び出されたときに同じTextViewを更新したいとします。私は、アンドロイドのapiデモで提供されているExampleAppWidgetの例で提供されているコードを試してみました。どのようにして必要なテキストを設定できますか?

答えて

11

アクティビティ内の何かをBroadcastReceiverから直接変更することはできません。なぜなら、放送受信機が呼び出されると、その活動が存在しない可能性があるからである。 (アクティビティが存在する場合)は、活動にメッセージを送ることができ、または活動が存在しない場合、あなたはそれを起動してインテントにいくつかのフラグを置くことができる

更新:

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; 
    } 
} 
:ここ は醜い方法です

そして、あなたのBroadcastReceiverで:

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

私は(もアラームを設定する)は、上記された同一の活性を呼び出すが、TextViewの要素に別のテキストを設定することで別の方法にしたいです。だから私はこのアクティビティをBroadcastReceiverからどのように呼び出すことができるかを知る必要があります。 – ric03uec

+0

私の更新を確認してください。ここでも、アクティビティと放送受信機は独立しています。あなたの受信機が呼び出されたとき、その活動は存在しないかもしれません。アクティビティでもブロードキャストが作成されます。 –

+0

これは多くのこと..それを解決した – ric03uec

関連する問題