Android 通知点击恢复活动

Android notification click restore activities

我的应用程序中有 MainActivity 和 WorkActivity。工作Activity 从 MainActivity:

开始
Intent intent = new Intent(view.getContext(), WorkActivity.class);
intent.putExtra("intArray", intArray);
startActivity(intent);

在工作中Activity 我读取了 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);

现在,当我关闭我的应用程序并点击通知时发生错误,因为 WorkActivity 无法获取

getIntent().getIntArrayExtra("intArray");

应该由 MainActivity 通过。 如何解决这个问题?

日志:

java.lang.RuntimeException: Unable to start service com.test.MyService@9051e18 with Intent { cmp=com.test/.MyService (has extras) }: java.lang.NullPointerException: Attempt to read from null array

错误发生,因为 WorkActivity.getIntent().getIntArrayExtra("intArray") 为空。 Activity 将此发送到服务行:

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

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

当您转到通知栏和 select 通知时,这会启动 WorkActivity 的新实例。 WorkActivity的这个实例不是从你的MainActivity开始的,而是通过通知启动的,而你在通知中放入的Intent没有多余的intArray.

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

    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");