Intent intent_1 = new Intent(this, MainActivity.class);
taskStackBuilder = TaskStackBuilder.create(this);
taskStackBuilder.addParentStack(MainActivity.class);
taskStackBuilder.addNextIntent(intent_1);
pendingIntent_1 = taskStackBuilder.getPendingIntent(EBC_ID,PendingIntent.FLAG_UPDATE_CURRENT);
notification = new Notification.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(getString(R.string.Text))
.setContentText(time)
.setAutoCancel(false)
.setContentIntent(pendingIntent_1)
.build();
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, notification);
我没有找到类似的东西,所以我决定问。单击开始按钮后,显示通知,现在,如果我按停止按钮以禁用它,则调用:notificationManager.cancel(NOTIFICATION_ID);
没关系。但是,当我更改屏幕方向时:通知管理器和通知为null。因此,停止按钮不起作用,通知始终显示。如何存储对它们的引用?我试图通过Bundle对象保存它,但是它需要简单的对象(字符串,整数),我不能放置通知对象。还尝试了sharedpreferences和parcelable方法,但是它没有用,它们也需要(String,int)。也尝试过这样的事情:
String noti1 = String.valueOf(notification);
String noti2 = String.valueOf(notificationManager);
然后在onSaveInstanceState方法()中,我可以通过它:
savedInstanceState.putString("notification1", noti1);
savedInstanceState.putString("notification2", noti2);
但是要像这样恢复它:notification = savedInstanceState.getString("notification1");
不被允许。通知对象与字符串对象不同。那么如何获得对通知对象的引用? (应用程序销毁后)我是否也应该只还原通知对象或NotificationManager和TaskStackBuilder?
您无需进行保存通知。您始终可以使用其notificationId访问通知。
您总是可以通过这样使用notifyId清除/停止通知。
notificationManager.cancel(notificationId);
UPDATE
(崩溃,为空,notificationManager)
这样在您的Activity中声明一个notificationManager。
public class MainActivity extends AppCompatActivity {
NotificationManager notificationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}
始终在OnCreate方法中初始化NotificationManager。
这样,您的NotificationManager在屏幕旋转时将永远不会为null。