创建警报对话框并发出通知会出现错误:无法添加窗口

时间:2018-11-08 04:04:28

标签: android firebase firebase-realtime-database notifications alertdialog

我首先要声明,这与其他人通过“警告对话框”收到的“无法添加窗口”错误问题并不相同。此应用程序的作用是在将值添加到Firebase中的某个路径时创建一个通知和警报对话框。我分别测试了通知和警报对话框,并且它们正在工作。即使应用程序在后台运行,我也没有收到任何错误。

当我尝试点击通知以将我带回我的应用程序时,出现了“无法添加窗口”问题。我的应用程序的运行方式是在另一台设备上,按下一个按钮,它将一些值插入Firebase的两条路径下,一条用于通知,另一条用于“警报对话框”。然后,在我当前的设备上,它从那些路径读取以检查它们是否不为空。如果它们不为空,则它将创建一个通知和“警报”对话框。

当前行为:当前正在发生的事情是,通知和警报对话框出现在活动中。只要我在另一个应用程序中,只要我的应用程序在后台,该通知也会弹出。 当我按通知以将我带回我的应用程序时,问题就来了。确实按预期将我带到活动中,但是当将新值插入Firebase时,它给了我“无法添加窗口”错误。

我无法弄清楚为什么会发生此错误,因为“警报”对话框和通知在应用程序中可以正常工作,但是当我使用通知转到应用程序时,出现此错误。 我曾尝试阅读其他StackOverflow答案,以解决相同的“无法添加窗口”错误,但是这些解决方案均不适用于我,因为它们与“警报对话框”的上下文有关,而我的问题在于通知将我带回我的应用。

这是GitHub上的link to my full Java code。 这是我用来创建通知的函数:

private void makeNotification(DatabaseReference databaseReference102, String value) {
// The error occurs when I click on the notification to take me back to the app which is in the code below.
//When I click on the notification, the next time values are aded to Firebase, it gives me the "Unable to Add Window" error.
    Intent intent = new Intent(getApplicationContext(), CaretakerAccount.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getApplicationContext(), "Channel")
            .setSmallIcon(R.drawable.notification)
            .setContentTitle("A User Logged In!")
            .setContentText(value + " just logged in!")
            .setStyle(new NotificationCompat.BigTextStyle()
                    .bigText(value + " just logged in!"))
            .setContentIntent(pendingIntent)
            .setAutoCancel(true)
            .setPriority(NotificationCompat.PRIORITY_MAX);

    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getApplicationContext());

    notificationManager.notify(0, mBuilder.build());
    databaseReference102.removeValue();
   //Removes the value in the notification path that way the notification is not made repeatedly.
}

任何帮助都将受到赞赏。预先感谢!

0 个答案:

没有答案