如何访问BroadcastReceiver中的TextView元素

ric*_*uec 4 layout android widget

我在android中测试一个简单的小部件,并使用Alarms定期更新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...
     }
 }
Run Code Online (Sandbox Code Playgroud)

现在我想在计时器到期后调用BroadCastReceiver时更新相同的TextView.我已经尝试了android api演示中提供的ExampleAppWidget示例中提供的代码,但是没有用.我该如何设置所需的文字?

kev*_*ynx 11

您不能直接从BroadcastReceiver更改活动中的内容.因为当广播接收器被调用时,活动可能不存在.你可以向活动发送消息(如果活动存在),或者如果活动不存在,你可以启动它并在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;
   }
}
Run Code Online (Sandbox Code Playgroud)

在你的BroadcastReceiver中:

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