Android 2.3上的推送通知崩溃了.

前端之家收集整理的这篇文章主要介绍了Android 2.3上的推送通知崩溃了.前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图用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,"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,"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);
    }
}

解决方法

问题是关于notification.setLatestEventInfo方法.

方法在API级别11中为deprecated,鼓励使用Notification.Builder.您还可以查看NotificationCompat.Builder以了解支持库的用法.

如果你仍然想按照自己的方式行事,你应该看看这个问题的接受答案:
Android – notification manager,having a notification without an intent

这清楚地表明使用这样的

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

猜你在找的Android相关文章