gpt4 book ai didi

android - 如果在内部类中没有抛出,则从 Intent 更改 View 内容

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

我想在几分钟后发出警报 Intent 。从这个 Intent 接收到一些数据,应用程序的 View 应该显示它。

此代码在 Activity 中

public class MainActivity extends Activity{

DatePicker pickerDate;
TimePicker pickerTime;
Button buttonSetAlarm;
TextView info;

...
private void setAlarm(){
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+1000, pendingIntent);
}

然后广播接收器,在 Activity 类中或在单独的 java 文件中(见文章结尾),看起来像这样:

public class AlarmReceiver extends BroadcastReceiver {

private static final int MY_NOTIFICATION_ID=1;
NotificationManager notificationManager;
Notification myNotification;

@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm received!", Toast.LENGTH_LONG).show();
String information = getInformation();
info.setText("this is your info"+information); <--------------------
}
}

如何做到这一点?

我试图通过膨胀从上下文中获取 View ,但没有成功

正在关注 android - How to get view from context?

我也尝试过从 Intent 中的包中获取 View ,但它们似乎只能传递字符串和可序列化对象。

如果我在 Activity 中放置广播接收器,则不会抛出警报(不会出现 toast 消息,textview 中不会发生任何变化)描述于:Calling SetContentView() from broadcast receiver虽然这个解决方案似乎并不像以下所述那样工作:BroadcastReceiver as inner class

提前致谢!

L.

最佳答案

您不能从 Activity 外部访问 UI 组件。要执行您想要的操作,您需要让 onReceive() 方法调用 Activity 本身的方法,然后由该方法完成工作。

一般来说这是错误的做法。您可能不需要使用 AlarmManagerBroadcastReceiver 来完成此操作。您应该只在您的 Activity 中创建一个 Handler 并向您的 Handler 发布一个 Runnable 或一条消息。您可以发布一些内容,以便它在将来某个时间执行 (Runnable) 或分派(dispatch)(消息)。

关于android - 如果在内部类中没有抛出,则从 Intent 更改 View 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20091710/

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