Android通知单击恢复活动

Android通知单击恢复活动,android,android-activity,android-notifications,Android,Android Activity,Android Notifications,我的应用程序中有MainActivity和WorkActivity。由MainActivity启动的工作活动: Intent intent = new Intent(view.getContext(), WorkActivity.class); intent.putExtra("intArray", intArray); startActivity(intent); 在WorkActivity中,我读取intArray参数并启动前台服务并发出通知: protected void onCreat

我的应用程序中有MainActivity和WorkActivity。由MainActivity启动的工作活动:

Intent intent = new Intent(view.getContext(), WorkActivity.class);
intent.putExtra("intArray", intArray);
startActivity(intent);
在WorkActivity中,我读取intArray参数并启动前台服务并发出通知:

protected void onCreate(Bundle savedInstanceState) {
    int[] intArray = getIntent().getIntArrayExtra("intArray");
    Intent intent = new Intent(this, MyService.class);
    intent.putExtra("intArray", intArray);
    startService(intent);
}
Intent newIntent = new Intent(this, WorkActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, newIntent, 0);
Notification.Builder builder = new Notification.Builder(this)
            .setSmallIcon(R.drawable.icon)
            .setContentTitle("title)
            .setContentIntent(pIntent)
            .setContentText("text");
Notification notification;
notification = builder.build();
startForeground(1, notification);
服务通知:

protected void onCreate(Bundle savedInstanceState) {
    int[] intArray = getIntent().getIntArrayExtra("intArray");
    Intent intent = new Intent(this, MyService.class);
    intent.putExtra("intArray", intArray);
    startService(intent);
}
Intent newIntent = new Intent(this, WorkActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(this, 0, newIntent, 0);
Notification.Builder builder = new Notification.Builder(this)
            .setSmallIcon(R.drawable.icon)
            .setContentTitle("title)
            .setContentIntent(pIntent)
            .setContentText("text");
Notification notification;
notification = builder.build();
startForeground(1, notification);
现在,当我关闭我的应用程序并单击以通知发生错误时,因为WorkActivity无法获取

getIntent().getIntArrayExtra("intArray");
这应该由MainActivity传递。 如何解决这个问题

日志:

发生错误的原因是WorkActivity.getIntent().getIntArrayExtra(“intArray”)为空。 活动以行形式将此发送到服务:

intent.putExtra("intArray", intArray);
startService(intent);

在服务中,我需要从intArray获取一些数字,如intArray[0],但intArray为空

当您转到通知栏并选择通知时,这将启动
WorkActivity
的新实例。
WorkActivity
的此实例不是从您的
main活动启动的,而是通过通知启动的,并且您在通知中输入的
意图没有额外的
数组

基本上,您需要将
putExtra()
调用
intArray
添加到此代码中:

    Intent newIntent = new Intent(this, WorkActivity.class);
    // HERE YOU NEED TO CALL newIntent.putExtra("intArray", intArray);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, newIntent, 0);
    Notification.Builder builder = new Notification.Builder(this)
        .setSmallIcon(R.drawable.icon)
        .setContentTitle("title)
        .setContentIntent(pIntent)
        .setContentText("text");

请将您的日志添加到问题中。关于通过通知传递变量和对象,已经有很多信息了:非常感谢。工作活动具有线路启动服务(意图);当在通知单击后创建WorkActivity时,服务再次启动。如何避免这种情况?我不完全理解您的要求,但是如果您希望
WorkActivity
知道它是从一个通知开始的(如果行为应该不同),您可以在通知中输入的
意图
中添加另一个“额外”。然后,
WorkActivity
可以检查这个“额外”来确定它是否是从通知启动的。好的,这就是我需要的。非常感谢。