还原屏幕方向后恢复通知

问题描述 投票:0回答:1
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?

android notifications bundle
1个回答
0
投票

您无需进行保存通知。您始终可以使用其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。

© www.soinside.com 2019 - 2024. All rights reserved.