2013-03-13 15 views
5

Ich versuche, Push-Benachrichtigungen an ein Telefon mit GCM zu senden, funktioniert es auf einem Gerät mit Android 4 in Ordnung, aber wenn ich versuche, stürzte die App auf Android 2.3 Benachrichtigung zu senden, und ich erhalte diesen FehlerPush-Benachrichtigungen auf Android 2.3 abgestürzt.

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 

das ist meine GCMBaseIntentService Klasse
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); 
    } 
} 

Antwort

3

Das Problem ist etwa notification.setLatestEventInfo Methode.

Diese Methode war deprecated in API-Ebene 11 und die Verwendung von Notification.Builder wird empfohlen. Sie können auch NotificationCompat.Builder zur Verwendung mit Support-Bibliothek betrachten.

Wenn Sie noch mit Ihrem Weg gehen wollen, können Sie auf der akzeptierte Antwort auf diese Frage aussehen sollte: Android - notification manager, having a notification without an intent

die eindeutig wie diese

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

notification.setLatestEventInfo(context, title, message, null); statt null Sie haben eine Absicht hinzufügen, die gestartet wird, wenn der Benutzer die Benachrichtigung berührt.

Vom android developer page:

contentIntent: Die Absicht zu starten, wenn der Benutzer die erweiterte Benachrichtigung klickt. Wenn es sich um eine Aktivität handelt, muss sie das Flag FLAG_ACTIVITY_NEW_TASK enthalten, was erfordert, dass Sie sich um die Aufgabenverwaltung kümmern, wie im Dokument Aufgaben und Zurückstapel beschrieben.

Verwandte Themen