0

我正在使用 Parse 推送通知,并使用这些方法来提醒用户消息是什么。我将如何显示 AlertDialog 一次,然后从意图中删除该数据,以便万一应用程序只是暂停而不是杀死它不会再次弹出?

在 onCreate() 结束时

handlePushIntent(getIntent());

我覆盖了 onNewIntent()

protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    handlePushIntent(intent);
}

和我的方法:

 private void handlePushIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    if (extras == null || extras.isEmpty())
        return;
    if (extras.containsKey("com.parse.Data")) {
        try {
            JSONObject data = new JSONObject(extras.get("com.parse.Data")
                    .toString());
            String alert = data.getString("alert");
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(alert);
            builder.setNeutralButton(android.R.string.ok, null);
            builder.show();
        } catch (Exception e) {
            Log.d("VNL", "Push Error", e);
        }
    }
}
4

2 回答 2

1

IMO 框架自动将意图对象添加到后台堆栈这一事实导致了您围绕暂停/恢复的“状态”问题......

还有其他使用消息循环和处理程序的场景,您可以通过使用处理程序/消息循环并在没有推送和对象(如意图)到后面/堆。

'最简单的例子' 答案在这里显示了内联处理程序/可运行,您可以在没有返回/堆栈的情况下放置警报

于 2013-06-19T13:21:20.127 回答
0

我使用另一种方法。为了显示推送通知,我使用 EventBus 并将通知作为粘性事件发布到 EventBus 上。一旦显示消息,我就会从 EventBus 中删除该事件。

有关 StickyEvents 的更多详细信息,请参阅http://greenrobot.org/eventbus/documentation/configuration/sticky-events/

于 2016-05-18T07:51:30.313 回答