Intereting Posts
Локализация Android Использование активов в робоэлектрических тестах Не удается отправить данные в Galaxy Nexus или из него через LLCP Используя пакет для передачи данных между фрагментом и другим примером фрагмента Я работал над проектом Android, чтобы отслеживать мою прогулку. Есть ли способ получить точность менее 10 метров на всех телефонах Как изменить цвет фона фокусного вида Как сохранить только первый добавленный фрагмент в фоновом стеке (перекрытие фрагментов)? Android Cling / Upnp proguard Автономный режим приложения Android, локальная синхронизация базы данных sqlite с удаленной базой данных Android sdk не будет установлен – сбой при проверке на jdk Android – как создать функцию многократного использования? Как получить намерение от PendingIntent Ошибка компиляции AAPT2: неверный размер на Android 3.0 Canary 1 в Windows Как динамически устанавливать список заголовков в Retrofit 2 (Android) Установить ширину WebView для упаковки содержимого HTML?

Push-уведомления на Android 2.3 сбой.

Я пытаюсь отправить push-уведомления на телефон с GCM, он отлично работает на устройстве с Android 4, но когда я пытаюсь отправить уведомление на Android 2.3, приложение разбилось, и я получаю эту ошибку

03-13 11:44:25.994: E/AndroidRuntime(3579): FATAL EXCEPTION: IntentService[GCMIntentService-1074787013996-1] 03-13 11:44:25.994: E/AndroidRuntime(3579): java.lang.IllegalArgumentException: contentIntent required: pkg=com.itom.vreauRCA id=0 notification=Notification(vibrate=default,sound=default,defaults=0xffffffff) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Parcel.readException(Parcel.java:1251) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Parcel.readException(Parcel.java:1235) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:274) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.NotificationManager.notify(NotificationManager.java:110) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.NotificationManager.notify(NotificationManager.java:90) 03-13 11:44:25.994: E/AndroidRuntime(3579): at com.itom.vreauRCA.GCMIntentService.generateNotification(GCMIntentService.java:71) 03-13 11:44:25.994: E/AndroidRuntime(3579): at com.itom.vreauRCA.GCMIntentService.onMessage(GCMIntentService.java:36) 03-13 11:44:25.994: E/AndroidRuntime(3579): at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:223) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:59) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Handler.dispatchMessage(Handler.java:99) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.Looper.loop(Looper.java:123) 03-13 11:44:25.994: E/AndroidRuntime(3579): at android.os.HandlerThread.run(HandlerThread.java:60) 03-13 11:44:26.374: V/GCMBroadcastReceiver(3579): onReceive: com.google.android.c2dm.intent.RECEIVE 03-13 11:44:26.374: V/GCMBroadcastReceiver(3579): GCM IntentService class: com.itom.vreauRCA.GCMIntentService 03-13 11:44:26.374: V/GCMBaseIntentService(3579): Acquiring wakelock 03-13 11:44:26.414: V/GCMBroadcastReceiver(3579): onReceive: com.google.android.c2dm.intent.RECEIVE 03-13 11:44:26.414: V/GCMBroadcastReceiver(3579): GCM IntentService class: com.itom.vreauRCA.GCMIntentService 03-13 11:44:26.414: V/GCMBaseIntentService(3579): Acquiring wakelock 

Это мой класс GCMBaseIntentService

 import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.util.Log; import com.google.android.gcm.GCMBaseIntentService; public class GCMIntentService extends GCMBaseIntentService { private static final String TAG = "GCMIntentService"; PendingIntent contentIntent; public GCMIntentService() { super(GetObiecte.SENDER_ID); } @Override protected void onRegistered(Context context, String registrationId) { Log.i(TAG, "Device registered: regId = " + registrationId); Log.d("GCMIntentService", "in GCMIntentService"); } @Override protected void onUnregistered(Context context, String registrationId) { Log.i(TAG, "Device unregistered"); } @Override protected void onMessage(Context context, Intent intent) { Log.i(TAG, "Received message"); String a = intent.getStringExtra("data"); String b = intent.getStringExtra("data2"); generateNotification(context, a,b); } @Override protected void onDeletedMessages(Context context, int total) { Log.i(TAG, "Received deleted messages notification"); } @Override public void onError(Context context, String errorId) { Log.i(TAG, "Received error: " + errorId); } @Override protected boolean onRecoverableError(Context context, String errorId) { Log.i(TAG, "Received recoverable error: " + errorId); return super.onRecoverableError(context, errorId); } private void generateNotification(Context context, String message, String title) { NotificationManager notificationManager = (NotificationManager) context .getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification(); notification.icon = R.drawable.ic_launcher; notification.tickerText = "i-Asigutare"; notification.defaults = Notification.DEFAULT_ALL; notification.setLatestEventInfo(context, title, message, null); notificationManager.notify(0, notification); } } 

Solutions Collecting From Web of "Push-уведомления на Android 2.3 сбой."

Проблема заключается в методе notification.setLatestEventInfo.

Этот метод был устаревшим в уровне API 11, и рекомендуется использовать Notification.Builder . Вы также можете посмотреть NotificationCompat.Builder для использования в библиотеке поддержки.

Если вы все еще хотите идти своим путем, вы должны посмотреть на принятый ответ на этот вопрос: Android – менеджер уведомлений, имеющий уведомление без намерения

В котором четко сказано,

 notification.setLatestEventInfo(context, contentTitle, contentText, PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0)); 

notification.setLatestEventInfo(context, title, message, null); Вместо null вы должны добавить намерение, которое будет запущено, когда пользователь коснется уведомления.

На странице разработчика Android :

ContentIntent: Цель запуска, когда пользователь нажимает расширенное уведомление. Если это действие, оно должно включать флаг FLAG_ACTIVITY_NEW_TASK, который требует, чтобы вы заботились о управлении задачами, как описано в документе «Задачи и задний стоп».