gpt4 book ai didi

android - 如何访问 BroadcastReceiver 中的 TextView 元素

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:28 25 4
gpt4 key购买 nike

我正在 android 中测试一个简单的小部件,并使用 Alarms 定期更新 TextView。问题是在 BroadcastReceiver 类中我无法访问 TextView 元素,我想在警报到期时更新它。该类正在被正确调用,因为我放在那里的 toast 给出了适当的信息。以下代码来 self 配置小部件和设置计时器的类。

 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 示例中提供的代码,但没有成功。如何设置所需的文本?

最佳答案

您不能直接从 BroadcastReceiver 更改 Activity 中的某些内容。因为当广播接收器被调用时, Activity 可能不存在。您可以向 Activity 发送消息(如果 Activity 存在),或者如果 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...
}

关于android - 如何访问 BroadcastReceiver 中的 TextView 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com