如何在其他Activity中调用通知打开时获取的title与body字符串?
如何将通知的title和body传递到目标Activity
其实这个场景本质上还是通过Intent启动Activity,所以我们可以用Android标准的Intent Extra机制来传递title和body,和你已经在传递openURL的方式是一样的。下面是具体的修改步骤:
1. 在通知打开处理器中添加数据到Intent
你只需要在创建Intent后,把获取到的title和body通过putExtra()方法添加进去就行。修改你代码里的Intent相关部分:
Intent intent = new Intent(mContext, (Class<?>) activityToLaunch); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); // 保留你原来的openURL传递逻辑 intent.putExtra("openURL", openURL); // 新增传递title和body的代码 intent.putExtra("notification_title", title); intent.putExtra("notification_body", body); Log.i("OneSignalExample", "openURL = " + openURL); Log.i("OneSignalExample", "title = " + title + ", body = " + body); mContext.startActivity(intent);
这里我用notification_title和notification_body作为数据的key,你可以根据自己的习惯命名,只要保证和目标Activity里的key一致就行。
2. 在目标Activity中获取传递的数据
接下来,在你要跳转的目标Activity(比如代码里的AboutActivity)中,获取这些数据。需要注意的是,因为你设置了FLAG_ACTIVITY_REORDER_TO_FRONT,如果目标Activity已经存在于栈中,系统会调用onNewIntent()而不是重新创建,所以最好同时处理onCreate()和onNewIntent()两种情况:
处理Activity首次创建的情况(onCreate)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); // 调用通用方法获取数据 getNotificationContent(getIntent()); }
处理Activity被重新唤起的情况(onNewIntent)
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); // 更新当前Activity的Intent为新传入的Intent getNotificationContent(intent); }
封装数据获取的通用方法
写一个通用方法来提取并使用数据:
private void getNotificationContent(Intent intent) { if (intent != null) { String title = intent.getStringExtra("notification_title"); String body = intent.getStringExtra("notification_body"); String openURL = intent.getStringExtra("openURL"); // 在这里使用这些数据,比如显示在UI上 if (title != null && body != null) { Log.i("AboutActivity", "收到通知内容:标题=" + title + ",内容=" + body); // 示例:把内容显示到TextView上 // TextView titleView = findViewById(R.id.tv_notification_title); // TextView bodyView = findViewById(R.id.tv_notification_body); // titleView.setText(title); // bodyView.setText(body); } } }
这样就能顺利获取到通知的title和body了,逻辑和你传递openURL完全一致,只是多添加了两个Extra字段而已。
内容的提问来源于stack exchange,提问作者BrianSebastian
相关产品推荐
相关产品推荐

