Android 使用 GCM 推送通知
Android Push Notifications with GCM
我正在开发一个简单的应用程序,用于从 PHP 服务器接收 GCM 推送消息。应用程序和服务器工作正常,即使有多个推送消息。我唯一想在应用程序中添加的是,如果在几秒钟内没有收到推送消息,比方说 5 秒,我希望我的应用程序吐司一条消息说 "Network error"。我正在使用 "WakefulBrodcastReceiver" 接收推送消息。除此之外,所有代码都工作正常,正如我所期望的那样。
工作:
按下按钮通知服务器,应用程序已准备好接收通知。
现在,我有两种情况,
- 应用程序未收到任何推送消息,自按钮按下事件以来已过去 5 秒,SHOW THE TOAST。
- 我已经收到了一些推送消息,自从我收到最后一条消息 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();
}
}
}
}
}
我正在开发一个简单的应用程序,用于从 PHP 服务器接收 GCM 推送消息。应用程序和服务器工作正常,即使有多个推送消息。我唯一想在应用程序中添加的是,如果在几秒钟内没有收到推送消息,比方说 5 秒,我希望我的应用程序吐司一条消息说 "Network error"。我正在使用 "WakefulBrodcastReceiver" 接收推送消息。除此之外,所有代码都工作正常,正如我所期望的那样。
工作:
按下按钮通知服务器,应用程序已准备好接收通知。
现在,我有两种情况,
- 应用程序未收到任何推送消息,自按钮按下事件以来已过去 5 秒,SHOW THE TOAST。
- 我已经收到了一些推送消息,自从我收到最后一条消息 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();
}
}
}
}
}