如果活动正在运行,请获取额外的意图

时间:2016-10-19 16:49:23

标签: android android-intent notifications android-pendingintent

我正在努力解决这个问题:我有一些通知,我想将意图附加内容传递给活动,即使应用程序已在运行。

我在S.O.找到的一些解决方案。没有为我工作,比如添加:

a:

到清单,我也使用了这个:

android:launchMode="singleTop"
像某人建议的那样。

我的代码是:

notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

然后在活动中:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(NotificationService.this);
mBuilder.setSmallIcon(R.mipmap.ic_launcher);
mBuilder.setContentTitle("New website change.");
mBuilder.setContentText("Changed: " + url);

Intent notificationIntent = new Intent(getContext(), MainActivity.class);
Bundle b = new Bundle();
b.putString("key", url);
notificationIntent.putExtras(b);

notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent intent = PendingIntent.getActivity(getContext(), id, notificationIntent, 0);

mBuilder.setContentIntent(intent);

NotificationManager mNotificationManager = (NotificationManager) getSystemService(NotificationService.this.NOTIFICATION_SERVICE);
mNotificationManager.notify(id, mBuilder.build());

欢迎任何帮助,我会将此应用程序的代码作为开源发布,谢谢。

2 个答案:

答案 0 :(得分:1)

Bundle b = getIntent().getExtras();

这将始终返回用于创建活动实例的Intent

如果活动已经存在,并且您正在使用Intent标记(例如,FLAG_ACTIVITY_REORDER_TO_FRONT或清单设置(例如,singleTop)来将控制权引导回该活动,那么需要覆盖onNewIntent()。传递给该方法的IntentIntent,用于将活动带回前台。

答案 1 :(得分:-1)

覆盖活动中的onNewIntent方法,并从此方法中的bundle中获取值。

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

String yourvalue = getIntent.getExtras.getString("key");

    }