Android 使用 GCM 推送通知

Android Push Notifications with GCM

我正在开发一个简单的应用程序,用于从 PHP 服务器接收 GCM 推送消息。应用程序和服务器工作正常,即使有多个推送消息。我唯一想在应用程序中添加的是,如果在几秒钟内没有收到推送消息,比方说 5 秒,我希望我的应用程序吐司一条消息说 "Network error"。我正在使用 "WakefulBrodcastReceiver" 接收推送消息。除此之外,所有代码都工作正常,正如我所期望的那样。

工作:
按下按钮通知服务器,应用程序已准备好接收通知。
现在,我有两种情况,

  1. 应用程序未收到任何推送消息,自按钮按下事件以来已过去 5 秒,SHOW THE TOAST。
  2. 我已经收到了一些推送消息,自从我收到最后一条消息 SHOW THE TOAST 以来已经过去了 5 秒。

以下代码片段是在处理推送消息的 GCM 处理程序 class 中编写的。

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Log.e("HANDLER", "inside run()");
        Toast.makeText(mContext, "Network Error", 1000).show();
    }
}, Constants.TIME_OUT);

Constants.TIME_OUT的值为5000, Toast 或 Log 从未显示。

我想做的就是,如果应用程序在 5 秒内没有收到来自 PHP 服务器的推送通知,则显示一条 "Check network connection" 消息。
正如 Udi I and Zharf 所述,当 onHandleIntent returns 时,服务会关闭,延迟运行也会关闭。所以,我尝试了另一种方式。
我使用了定时器任务。 代码是,

Timer timer;
TimerTask timerTask;

public static void startTimer(Context context) {
    timer = new Timer();
    initializeTimerTask(context);
    timer.schedule(timerTask, 5000);  //Time in miliSeconds
}

public static void stopTimer(){
    if(timer != null)
        timer.cancel();
    timer = null;
}

public static void initializeTimerTask(final Context context){
    timerTask = new TimerTask() {
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    Toast.makeText(context, "Check Network connection...", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
}