Android 如何访问BroadcastReceiver中的TextView元素

Android 如何访问BroadcastReceiver中的TextView元素,android,layout,widget,Android,Layout,Widget,我正在android中测试一个简单的小部件,并使用警报定期更新TextView。问题是,在BroadcastReceiver类中,我无法访问TextView元素,我希望在报警过期时更新该元素。这个类被正确地调用,因为我放在那里的祝酒词给出了适当的信息。下面的代码来自我配置小部件和设置计时器的类 public void onCreate(Bundle bundle) { super.onCreate(bundle); Intent intent = getIntent();

我正在android中测试一个简单的小部件,并使用警报定期更新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。我已经尝试了android api演示中提供的ExampleAppWidget示例中提供的代码,但没有成功。如何设置所需的文本?

您不能直接从广播接收器更改活动中的内容。因为当广播接收器被呼叫时,活动可能不存在。您可以向某个活动发送消息(如果该活动存在),或者如果该活动不存在,您可以启动它并在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;
   }
}
在您的广播接收器中:

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

我想调用上面提到的同一个活动(它也设置了报警),但是其中有一个不同的方法来设置TextView元素中的另一个文本。因此,我需要知道如何从BroadcastReceiver.chek中调用此活动来检查我的更新。同样,活动和广播接收器是独立的。当您的接收者被呼叫时,该活动可能不存在。甚至连广播都是在活动中创建的。只是遇到了这个。我尝试了您的示例代码Kevin,但即使活动出现在屏幕上,当尝试调用“setViewText…”时,报警接收器也会返回空值。最后,我使用广播接收器,并从报警接收器传回一个操作。@Kevin lynx-感谢您的丑陋方式,兄弟!我很想知道这样做的正确方法。实现同样目标的最佳方式是什么D