我有一个应用程序,我想在屏幕顶部显示一个通知,随着时间的更新,并让它停留在那里直到用户关闭它或按下一个动作。
我的问题是,如何让通知以这种方式停留在屏幕顶部并且它是否也可以更新?
要让单挑通知留在那里,您需要使用
PendingIntent dummyIntent = PendingIntent.getActivity(context, 0, new Intent(), 0);
notification.setFullScreenIntent(dummyIntent, true);
我从帖子中得到的理解是,应用程序认为它应该保留在那里,直到全屏意图采取行动,但它永远不会,因为它是一个虚拟意图。
https://stackoverflow.com/a/45516069/6296686
更新通知使用
notificationBuilder.setOnlyAlertOnce(true);
//Use the same builder when updating
notificationBuilder.setContentTitle("Updated Title");
notificationManager.notify(notificationID, notificationBuilder.build());
编辑:我找到了一个使用通知的实际解决方案。见其他答案。
我认为这是通过 AlertDialog 而不是通知来完成的。我个人只是希望它具有“粘性”,但更新自定义 AlertDialog 应该不会太难。为了在屏幕顶部制作一个 AlertDialog,我使用了以下代码。
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
dialogBuilder.setTitle(getNotificationTitle(context, showingTasks));
dialogBuilder.setNeutralButton("Dismiss", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
//Nothing
}
});
dialogBuilder.setPositiveButton("Action", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
//Action code
}
});
Dialog dialog = dialogBuilder.create();
Window window = dialog.getWindow();
WindowManager.LayoutParams windowLayoutParams = window.getAttributes();
windowLayoutParams.gravity = Gravity.TOP;
window.setAttributes(windowLayoutParams);
dialog.show();
如果您在通知消失之前更新通知,它将保留下来。为此,您可以发送包含新内容但相同 ID 的通知,然后通知将更新并且超时将重置。