GCM notifications are not being received when my device is idle. They all come through at once when the device is woken up. Here is the code that sends the message to GCM:
Sender sender = new Sender(API_KEY);
Message message = new Message.Builder().addData("type","newRequest").delayWhileIdle(false).build();
MulticastResult results = sender.send(message, devices, 5);
Here is my GCMIntentService class:
public class GCMIntentService extends GCMBaseIntentService{
public static final String SENDER_ID = "XXXXXXXXXXXXX";
public GCMIntentService(){
super(SENDER_ID);
}
@Override
protected void onError(Context context, String errorId) {
// TODO Auto-generated method stub
}
@Override
protected void onMessage(Context context, Intent intent) {
// TODO Auto-generated method stub
WakeLocker.acquire(context);
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
long when = System.currentTimeMillis();
int icon = R.drawable.ic_dialog_info;
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this,0, notificationIntent, 0);
Notification noti = new NotificationCompat.Builder(this)
.setWhen(when).setContentTitle("New Storage Request")
.setContentText("Touch to open app")
.setSmallIcon(icon)
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setTicker("New Storage Request").setAutoCancel(true)
.setContentIntent(contentIntent)
.getNotification();
mNotificationManager.notify(0, noti);
}
@Override
protected void onRegistered(Context context, String regId) {
// TODO Auto-generated method stub
RestClient client = new RestClient(StorageApp.STORAGE_HOST+"StorageWebService/rest/operations/registerForGCM");
client.AddParam("regId", regId);
try {
client.Execute(RequestMethod.GET);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("done with call");
}
@Override
protected void onUnregistered(Context context, String regId) {
// TODO Auto-generated method stub
RestClient client = new RestClient(StorageApp.STORAGE_HOST+"StorageWebService/rest/operations/unregisterForGCM");
client.AddParam("regId", regId);
try {
client.Execute(RequestMethod.GET);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
WakeLocker is the code described in this answer: