gpt4 book ai didi

android - 从android中的点击通知获取数据

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

大家好,我需要有关如何从使用广播接收器设置的未决 Intent 中获取数据的帮助。我想要发生的是在单击通知时获取 id 的数据,这将是我的 Activity 所需要的。

我是这样做的

public class AlertReceiver extends BroadcastReceiver {

private int id;
// Called when a broadcast is made targeting this class
@Override
public void onReceive(Context context, Intent intent) {

Bundle bundle = intent.getExtras();
String title = bundle.getString("title");
String time = bundle.getString("time");
id = bundle.getInt("id");

createNotification(context, title, time, "Pharoah Reminder");
}

public void createNotification(Context context, String msg, String msgText, String msgAlert){
Intent reminderActivity = new Intent(context, ReminderPreviewActivity.class);
reminderActivity.putExtra("id", id);

PendingIntent notificationIntent = PendingIntent.getActivity(context, id,
reminderActivity, PendingIntent.FLAG_UPDATE_CURRENT );

NotificationCompat.Builder mBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(context)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(msg)
.setTicker(msgAlert)
.setContentText(msgText)
.setContentIntent(notificationIntent);

mBuilder.setContentIntent(notificationIntent);
mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND);
mBuilder.setAutoCancel(true);

NotificationManager mNotificationManager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(id, mBuilder.build());
}
}

但是当我尝试从通知中打开我的 Activity 时它总是空的。

这是我如何得到它的。

public class ReminderPreviewActivity extends AppCompatActivity {

private Toolbar mToolBar;

private TextView titleTextView;
private TextView descTextView;
private TextView timeTextView;
private TextView dateTextView;

private String title;
private String desc;
private String date;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reminder_preview);

mToolBar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(mToolBar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);



titleTextView = (TextView) findViewById(R.id.titleTextView);
descTextView = (TextView) findViewById(R.id.descTextView);
timeTextView = (TextView) findViewById(R.id.timeTextView);
dateTextView = (TextView) findViewById(R.id.dateTextView);

Intent extras = getIntent();

if(extras.getStringExtra("title") != null){
setContentFromExtras(extras);
}else{
setContentFromDB(extras);
}
}

private void setContentFromExtras(Intent extras){
title = extras.getStringExtra("title");
desc = extras.getStringExtra("desc");
date = extras.getStringExtra("date");

String[] dateDB = date.split(" ");

titleTextView.setText(title);
descTextView.setText(desc);
timeTextView.setText(formatTime(dateDB[1])+" "+dateDB[2]);
dateTextView.setText(formatDate(dateDB[0]));
}

public void setContentFromDB(Intent extras){
String id = extras.getStringExtra("id");

int reminderID = Integer.parseInt(id);

titleTextView.setText(reminderID);
}

我需要 id 来从数据库中检索数据。当我关闭应用程序时,同样的事情发生了。

最佳答案

在您的AlertReceiver 中,您声明了

private int id;

并且您在

中使用此 int
reminderActivity.putExtra("id", id);

因此,您还必须在 setContentFromDB() 方法中将其作为 int 获取:

int reminderID = extras.getIntExtra("id", someInt);
titleTextView.setText("" + reminderID);

其中“someInt”应该是一个通常从不使用的 int 值,或者如果在您的情况下有意义的话,可以是默认值。

你从 getStringExtra("id") 得到了 null,因为如果没有找到带有键“id”的 String,那是返回值。

如果您将 int 值与 TextView.setText() 一起使用,它将被解释为字符串资源。我认为在你的情况下('id' 是指数据库)这很糟糕。

关于android - 从android中的点击通知获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34094210/

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