【问题标题】:android java notification tap reset activityandroid java通知点击重置活动
【发布时间】:2020-05-07 17:21:17
【问题描述】:

我使用此代码进行通知

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), "notify_001");
 Intent intent = new Intent(getApplicationContext(), MainActivity.class);
 PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, 
 intent,PendingIntent.FLAG_UPDATE_CURRENT);
 mBuilder.setContentIntent(pendingIntent); 

当我点击通知应用打开并重新启动 MainActivity 时,我不想重新启动 MainActivity。

【问题讨论】:

  • 您不应该使用任何特殊的启动模式,因为它们通常会导致比解决的问题更多的问题。请查看我的答案以了解解决此问题的正确方法。

标签: android android-intent android-activity notifications android-pendingintent


【解决方案1】:

如果可能,尝试将启动模式添加到主要活动。

在活动标签下的清单中只使用这个标签。或者,您可以在从通知管理器类启动主要活动的挂起意图时添加此模式。

android:launchMode="singleTask"

示例代码

<activity
  android:name=".MainActivity"
  android:label="singleTask"
  android:launchMode="singleTask"
  android:taskAffinity="">

这应该使新启动将数据传递给现有活动(如果有任何活动已打开并且存在于后台堆栈中)。

还要确保覆盖以下方法以在主要活动中接收新数据

protected void onNewIntent (Intent intent){
  //your update code goes here
}

【讨论】:

  • 一般来说这是个坏建议。如果你有一个只有 1 个Activity 的简单应用程序,这次它可能对你有用,但这是解决问题的坏方法,而不是解决问题的方法。
【解决方案2】:

如果您只想将您的应用程序带到前台(如果它正在运行)或启动它(如果它没有运行),您应该使用以下方法:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(),
        "notify_001");
Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, 
intent,PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pendingIntent); 

这模拟点击主屏幕上的应用程序图标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多