Android 4.x设备接收GCM消息,但Android 2.3设备不接收

我的Android应用程序从不在2.3设备上接收GCM消息,但它在4.x设备上接收。 我可以成功注册所有设备(2.3和4.x)。 我认为它可能与此问题有关 ,但似乎我已正确配置我的Android清单。 有人能够注意我的IntentService和BroadcastReceiver,看看他们是否注意到任何问题? 任何帮助将不胜感激。 请注意,在我附加调试器的情况下发送通知时,永远不会为Android 2.3调用onHandeIntent()。 我检查了4.x设备,它们确实触发了onHandleIntent()中的调试器。 谢谢!

Android Manfest:

                             

广播接收器:

 package my.package; import android.app.*; import android.content.*; public class GcmBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { NotificationIntentService.runIntentInService(context, intent); setResultCode(Activity.RESULT_OK); } } 

通知意向服务

 public class NotificationIntentService extends IntentService { private String TAG = "NotificationIntentService"; public NotificationIntentService() { super(AppConstants.GCM_SENDER_ID); } public NotificationIntentService(String name) { super(name); // TODO Auto-generated constructor stub } private static PowerManager.WakeLock sWakeLock; private static final Object LOCK = NotificationIntentService.class; static void runIntentInService(Context context, Intent intent) { synchronized(LOCK) { if (sWakeLock == null) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "my_wakelock"); } } sWakeLock.acquire(); intent.setClassName(context, NotificationIntentService.class.getName()); context.startService(intent); } public final void onHandleIntent(Intent intent) { try { String action = intent.getAction(); if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) { //don't care. } else if (action.equals("com.google.android.c2dm.intent.RECEIVE")) { handleMessage(intent); } } finally { synchronized(LOCK) { sWakeLock.release(); } } } private void handleMessage(Intent intent) { Bundle b = intent.getExtras(); String text = b.getString("text"), title = b.getString("title"), largeImageUrl = b.getString("largeImageUrl"); Log.i(TAG, "Message is " + text); NotificationManager nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); Bitmap bit=null; if (largeImageUrl != null && !largeImageUrl.isEmpty()) { try{bit = BitmapFactory.decodeStream((InputStream)new URL(largeImageUrl).getContent()); } catch (Exception e){} } NotificationCompat.Builder nc = new NotificationCompat.Builder(this) .setContentTitle(title) .setContentText(text) .setSmallIcon(R.drawable.ic_launcher) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .setAutoCancel(true) //notification disappears when clicked .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT)); //bit = Bitmap.createScaledBitmap(bit, android.R.dimen.notification_large_icon_width, android.R.dimen.notification_large_icon_height, true); if (bit != null) nc.setLargeIcon(bit); nm.notify(0, nc.build()); } } 

我能看到的第一个潜在问题是:

permission元素中的包名称与uses-permission元素中的包名称不同。 在我的应用程序(针对Android 2.2)中,它们完全相同。

    

如果你使用不同applicationId的产品风味,请参阅我的问题的答案 在Android 2.3.6 v上没有收到GCM消息但在android 4.X v上工作正常

GCM需要在设备上安装Google Play服务,但在版本2.3中默认情况下不安装。