2017-02-28 61 views
0

当使用以下代码:通知应用程序被关闭并重新打开与通知后没有被调用

public class MainActivity extends AppCompatActivity { 
    private final static AtomicInteger notificationId = new AtomicInteger(0); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 
     mBuilder.setSmallIcon(R.drawable.notif) 
      .setColor(ContextCompat.getColor(this, R.color.colorPrimary)) 
      .setContentTitle("Request Received") 
      .setContentText("new Notif") 
      .setAutoCancel(true) 
      .setDefaults(DEFAULT_LIGHTS); 
     mBuilder.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_NO_CREATE)); 
     NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     notificationManager.notify(notificationId.incrementAndGet(), mBuilder.build()); 
    } 
} 

下面的用户行为创建不一致的方式来通知:

  1. 用户打开应用程序,会出现一个新的通知。
  2. 用户关闭应用程序。
  3. 用户单击通知。
  4. 创建新通知并打开应用程序。
  5. 用户单击通知(当应用程序打开时,如果应用程序关闭,则通知按预期行为)。
  6. 没有任何反应。以下日志消息是可见的:02-28 14:09:15.966 840-2273 /? I/ActivityManager:从uid 10093开始u0 {cmp = app.myapplication/.MainActivity} from pid -1 on display 0 02-28 14:09:15.966 840-2273 /? W/ActivityManager:从非活动上下文调用的startActivity;强制Intent.FLAG_ACTIVITY_NEW_TASK用于:Intent {cmp = app.myapplication/.MainActivity},这与Activity当前处于打开状态无关。

在我的代码中是否有导致此行为的东西? 预期这种行为?

此外,我想提以下使用情况给出了预期的通知行为:

  1. 用户打开应用程序时,会出现一个新的通知。
  2. 用户单击通知。
  3. 创建一个新通知并打开MainActivity。 - >转到步骤2。

此行为是在Android 5和6显而易见的,但在Android 7.

+0

在Manifest中为MainActivity'android:launchMode'定义了什么值? –

+0

我没有定义它,因为它是我相信的“标准”。根据上面列出的日志消息,它认为它正在实例化一项新任务。 –

+1

[不是](https://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK) –

回答

0

该问题似乎基于:“当使用此标志时,如果某个任务已经在运行,您现在正在启动一项活动,则不会启动新的活动;相反,当前的任务将被带到屏幕的前面和最后一个状态。“关于“FLAG_ACTIVITY_NEW_TASK”。这导致“当前任务”在它已经处于活动状态时被带到屏幕上。

0

以下代码举动没有进行过的onResume()方法

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this); 
     mBuilder.setSmallIcon(R.drawable.notif) 
      .setColor(ContextCompat.getColor(this, R.color.colorPrimary)) 
      .setContentTitle("Request Received") 
      .setContentText("new Notif") 
      .setAutoCancel(true) 
      .setDefaults(DEFAULT_LIGHTS); 
     mBuilder.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_NO_CREATE)); 
     NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
     notificationManager.notify(notificationId.incrementAndGet(), mBuilder.build()); 
+0

这不能解决问题。 –

+0

你到底想做什么? –

+0

我期望这个用例对于我描述的第一种情况是这样的: 1.用户打开应用程序,出现一个新的通知。 2.用户关闭应用程序。 3.用户单击通知。 4。一个新的通知被创建并且应用程序被打开。 5.用户单击通知(在应用程序打开时,如果应用程序关闭,则通知按预期行为)。 6.创建新通知并重新启动活动。 但是,如果您阅读我的问题,则不会发生这种情况。 –

相关问题