如何将参数从通知单击发送到活动?

发布于 2021-01-30 22:41:58

我可以找到一种从通知中向活动发送参数的方法。

我有一个创建通知的服务。当用户单击通知时,我想使用一些特殊参数打开我的主要活动。例如,一个项目ID,这样我的活动就可以加载并显示一个特殊的项目详细信息视图。更具体地说,我正在下载文件,下载文件时,我希望通知具有以下意图:单击该通知后,它将以特殊模式打开我的活动。我曾尝试使用putExtra我的意图,但似乎无法提取它,因此我认为我做错了。

我的服务中创建通知的代码:

        // construct the Notification object.
     final Notification notif = new Notification(R.drawable.icon, tickerText, System.currentTimeMillis());


    final RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout);
    contentView.setImageViewResource(R.id.image, R.drawable.icon);
    contentView.setTextViewText(R.id.text, tickerText);
    contentView.setProgressBar(R.id.progress,100,0, false);
    notif.contentView = contentView;        

    Intent notificationIntent = new Intent(context, Main.class);
    notificationIntent.putExtra("item_id", "1001"); // <-- HERE I PUT THE EXTRA VALUE
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
    notif.contentIntent = contentIntent;

    nm.notify(id, notif);

我的活动中的代码试图从通知中获取额外的参数:

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);


    Bundle extras = getIntent().getExtras();
    if(extras != null){
        Log.i( "dd","Extra:" + extras.getString("item_id") );
    }

Extras始终为null,并且我从不记录任何内容。

顺便说一句… onCreate仅在我的活动开始时运行,如果我的活动已经开始,我也想收集额外的物品,并根据收到的item_id介绍我的活动。

有任何想法吗?

关注者
0
被浏览
279
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    看一下本指南(创建通知)并示例ApiDemos“ StatusBarNotifications”“ NotificationDisplay”

    要管理活动是否已在运行,您有两种方法:

    1. 添加 FLAG_ACTIVITY_SINGLE_TOP标志的意图开展活动时,然后在活动类实现 onNewIntent(意向意图)事件处理程序,这样你可以访问新的意图,这是所谓的活动(这是不一样的只是打电话getIntent (),这将始终返回启动您的活动的第一个Intent。

    2. 与第一名相同,但必须在活动AndroidManifest.xml中添加“ singleTop”,而不是向Intent添加标志。

    如果您使用Intent Extras,请记住PendingIntent.getActivity()使用flag 调用PendingIntent.FLAG_UPDATE_CURRENT,否则相同的Extras将被重用于每个通知。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看