如何在BroadcastReceiver中访问TextView元素

4

我正在测试Android上的一个简单小部件,并使用闹钟定期更新TextView。问题是,在BroadcastReceiver类中,我无法访问TextView元素,而我希望在闹钟到期时更新它。该类被正确调用,因为我放置在那里的Toast正在给出适当的消息。以下代码来自我配置小部件并设置定时器的类。

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

现在,当计时器到期后广播接收器被调用时,我希望更新同一个TextView。我尝试了Android API示例中提供的ExampleAppWidget示例代码,但没有成功。我该如何设置所需的文本?

1个回答

11

你无法直接从广播接收器中更改活动(Activity)中的内容。因为当广播接收器被调用时,该活动可能不存在。你可以向一个活动发送消息(如果该活动存在),或者如果该活动不存在,你可以启动该活动并在意图(Intent)中放置一些标记。

更新:这里有一个不太好的方法:

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

我想调用上面提到的相同活动(也设置了闹钟),但其中的不同方法来设置TextView元素中的另一段文本。因此,我需要知道如何从BroadcastReceiver中调用此活动。 - ric03uec
请查看我的更新。再次提醒,活动和广播接收器是独立的。当您的接收器被调用时,该活动可能不存在。甚至广播也是在活动中创建的。 - kevin lynx
我刚看到这个。我尝试了你的示例代码Kevin,但即使活动在屏幕上显示,当尝试调用“setViewText…”时,闹钟接收器仍会返回null。最终我选择了广播接收器,并从闹钟接收器传回一个操作。 - Evan R.
@kevin lynx - 感谢你的方式,兄弟!我很想知道正确的做法。有什么最好的方法来实现同样的事情吗? :D - stackflow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接