屏幕方向更改后恢复通知
Restoring notification after screen orientation change
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);
没关系。但是当我改变屏幕方向时:notificationManager 和通知为空。所以停止按钮不起作用,一直显示通知。
我如何存储对它们的引用?
我试图通过 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?
您无需保存 notification.You 始终可以使用其 notificationId 访问通知。
您始终可以 clear/stop 通过使用 notificationId 这样的通知。
notificationManager.cancel(notificationId);
更新
(崩溃的答案,Null 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。
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);
没关系。但是当我改变屏幕方向时:notificationManager 和通知为空。所以停止按钮不起作用,一直显示通知。
我如何存储对它们的引用?
我试图通过 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?
您无需保存 notification.You 始终可以使用其 notificationId 访问通知。
您始终可以 clear/stop 通过使用 notificationId 这样的通知。
notificationManager.cancel(notificationId);
更新
(崩溃的答案,Null 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。