通过通知意图发送 putExtra

084*_*277 1 android

我想根据代码打开一个特定的选项卡。如果我通过普通按钮执行此操作,它就会起作用。

它的工作原理:

public void toSomewhere (View view) {
    Intent intent = new Intent(this, SomewhereActivity.class);
    intent.putExtra("FirstTab", 2);
    startActivity(intent);
}

Intent i = getIntent();
int tabToOpen = i.getIntExtra("FirstTab", -1);
if (tabToOpen!=-1) {
    // Open the right tab
}
else {
    // Other tab
}
Run Code Online (Sandbox Code Playgroud)

我希望它通过通知工作的方式(此时我有这段代码发送通知,但不提供 .putExtra):

public static void NotificationIntent(String title, String message) {
    Intent notificationIntent = new Intent(currentContext, SomewhereActivity.class);
    **notificationIntent.putExtra("FirstTab", 2);**
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent intent = PendingIntent.getActivity(currentContext, 0, notificationIntent, 0);

    NotificationCompat.Builder mBuilder = new    NotificationCompat.Builder(currentContext)
            .setContentTitle(title)
            .setContentIntent(intent)
            .setContentText(message)
            .setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS);
    NotificationManager mNotificationManager = (NotificationManager) currentContext.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(0, mBuilder.build());
}
Run Code Online (Sandbox Code Playgroud)

有谁知道如何解决这个问题,因此它也适用于通知帖子?

Ser*_*kov 7

使用FLAG_UPDATE_CURRENT

来自文档:

指示如果所描述的 PendingIntent 已经存在,则保留它但用这个新 Intent 中的内容替换其额外数据的标志。用于 getActivity(Context, int, Intent, int)、getBroadcast(Context, int, Intent, int) 和 getService(Context, int, Intent, int)。

如果您正在创建仅额外内容发生变化的意图,并且不关心收到您之前的 PendingIntent 的任何实体将能够使用新的额外内容启动它,即使它们没有明确提供给它,则可以使用此方法。

代码 :

Intent notificationIntent = new Intent(getApplicationContext(), viewmessage.class);
notificationIntent.putExtra("NotificationMessage", notificationMessage);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);

PendingIntent pendingNotificationIntent = PendingIntent.getActivity(getApplicationContext(),notificationIndex,notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(getApplicationContext(), notificationTitle, notificationMessage, pendingNotificationIntent);
Run Code Online (Sandbox Code Playgroud)

在活动方法中onNewIntent

@Override
public void onNewIntent(Intent intent){
    Bundle extras = intent.getExtras();
    String notificationMessage = extras.getString("NotificationMessage", "UNDEFINED");
}
Run Code Online (Sandbox Code Playgroud)

还转发呼叫onCreate

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    onNewIntent(getIntent());
}
Run Code Online (Sandbox Code Playgroud)