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
.
基本上,您需要将 intArray
的 putExtra()
调用添加到此代码中:
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");
我的应用程序中有 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
.
基本上,您需要将 intArray
的 putExtra()
调用添加到此代码中:
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");