gpt4 book ai didi

android - 在 AlarmReceiver 中调用其他 Activity 的方法

转载 作者:行者123 更新时间:2023-11-29 23:29:34 25 4
gpt4 key购买 nike

我正在使用 TextView 进行 Activity ,在后台运行的 AlarmReceiver 具有 10 分钟的时间触发器。该 Activity 有一个我想通过触发器调用的方法。该方法为 TextView 设置一个新值。但是通过从触发器调用它我不能使用“findViewById”。此时我得到一个 NullPointerException。我还尝试在触发器调用时设置 ContentView,但在这里我得到一个 NullPointerException

这是代码:

值(value)观 Activity :

public void setSyncValue(Context context, boolean fromSyncService, String value){
try {
if(fromSyncService){
setContentView(R.layout.activity_values);
}
...
try{
...
TextView lastSyncTV = (TextView) findViewById(R.id.last_sync_label);
lastSyncTV.setText(value);
...
} catch (Exception ex) {
....
}
} catch (Exception ex) {
....
}
}

报警接收器

@Override
public void onReceive(Context context, Intent intent) {
try {

Intent i = new Intent(context, SyncService.class);
context.startService(i);
}catch (Exception ex){
.....
}
}

同步服务

  //runns every 10min
@Override
protected void onHandleIntent(Intent intent) {

try {
...
ValuesActivity valuesActivity = new ValuesActivity();
valuesActivity.setSyncValue(....)
....
}
.....
}

最佳答案

实际上你不能通过创建一个实例来创建一个 Activity ,你必须通过 Intent 来运行一个 Activity 。在你的情况下,如果一个 Activity 已经在前台并且对用户可见,你必须使用 FLAG_ACTIVITY_CLEAR_TOP 标志开始 Activity 。将新 Intent 发送到您当前的可见 Activity 。为此,您可以使用以下代码:

context.startActivity(new Intent(this,ValuesActivity.class).putExtras(bundle).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

通过这种方式,如果 Activity 已经对用户可见,那么 Android 不会重新创建 Activity,而是将新的 Intent 发送到方法 onNewIntent 并且您必须在 ValuesActivity 中覆盖此方法以接收您的服务发送的新 Intent 。像这样:

public void onNewIntent(Intent intent){
String value = intent.getStringExtra(/*your key*/);
lastSyncTV.setText(value);

}

如果你想检查 Activity 的可见性,你可以在你的 Activity 中添加静态属性 public static boolean isVisible = false; 并在你的 Activity 的 onResume 中将其切换为真并切换在 onPause 方法中设置为 false。然后在 startActivity 之前检查 if(ValuesActivity.isVisible)

关于android - 在 AlarmReceiver 中调用其他 Activity 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52869791/

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