Android - 用户按通知时传递数据

时间:2017-03-13 11:15:53

标签: android android-notifications

我有以下代码,我想在用户点击通知时检索一些数据。但我不知道如何处理它。 我知道有一种方法可以将活动作为参数传递,但取决于我应该打开不同活动的通知内容。

这是欲望的工作流程

我发布了一个通知(带有键值数据) - >用户点击通知 - > BroadcastReceiver(检索键值数据) - >活性

问题是我的BroadcastReceiver没有收到数据。

    Intent notificationIntent = new Intent(NOTIFICATION_SELECTED_ACTION);
    notificationIntent.putExtra("mykey","myvalue");
    PendingIntent intent = PendingIntent.getBroadcast(context, 0, notificationIntent, 0);
    context.getApplicationContext().registerReceiver(receiverOpen, new IntentFilter(NOTIFICATION_SELECTED_ACTION));

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
    ...
    mBuilder.setContentIntent(intent);
    //I publish the notification in the notification bar
    notification = mBuilder.build();
    mNotificationManager.notify(id_push, notification);


   private final BroadcastReceiver receiverOpen = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        Intent i = new Intent(context.getApplicationContext(),MainActivity.class);
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        //Value is always null ffs
        String value = intent.getStringExtra("mykey");

        count = 0; // Do what you want here
        notificationList.clear();
        editor.clear();
        editor.commit();

        context.startActivity(i);
    }
};

3 个答案:

答案 0 :(得分:0)

与您的代码一样,您正在使用广播服务。如果您在前台应用程序时收到推送通知。你可以使用下面的广播服务

            Intent intent = new Intent("myPush");
            intent.putExtra("message", messageBody);
            intent.putExtra("title", title);
            intent.putExtra("Id", id);
            getApplicationContext().sendBroadcast(intent);

您可以在应用中的任何位置注册广播公司。如下所示

@Override
    public void onResume() {
        super.onResume();
        getActivity().registerReceiver(mMessageReceiver, new IntentFilter("myPush"));
    }

所以当推送到达时,您可以使用以下方法来启动任何方法以转到首选活动。

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {

            // Extract data included in the Intent
            String message = intent.getStringExtra("message");
            String title = intent.getStringExtra("title");
            final String orderId = intent.getStringExtra("Id");

            Log.e("Main Activity",title+" : "+message);

           //AnyIntent or Query

        }
    };

在后台应用时。

            Intent intent = new Intent(this, MainActivity.class);
            intent.putExtra("message", messageBody);
            intent.putExtra("title", title);
            intent.putExtra("Id", Id);

            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                    PendingIntent.FLAG_ONE_SHOT);

并在onCreate方法的主要活动中处理它。

            Intent intent = getIntent();
            String receivedId = intent.getStringExtra("Id");

           if(receivedId != null){
             //Do Somthing as you want
           }

答案 1 :(得分:0)

根据这篇文章https://stackoverflow.com/a/6752571/2139691 我应该使用PendingIntent.FLAG_CANCEL_CURRENT

PendingIntent intent = PendingIntent.getBroadcast(context, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);

答案 2 :(得分:-1)

首先,您需要在通知中拥有价值。 通过Intent将数据从通知活动传递到您的意图活动。 见例如。

 Intent intent = new Intent(this, MainActivity.class);
    intent.putExtra("point", "2");
    intent.putExtra("link", link);

将此通知传递给MainActivity, 在MainActivity中,

   if (getIntent().hasExtra("point")) {
        String link = getIntent().getStringExtra("link)

使用此链接'我开了网站。 谢谢.. !!