You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在其他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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:54:54