5

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);
    }
}
4

2 に答える 2

3

問題はnotification.setLatestEventInfoメソッドに関するものです。

このメソッドはAPIレベル11で非推奨になり、 Notification.Builderの使用が推奨されます。サポートライブラリでの使用法については、 NotificationCompat.Builderを参照することもできます。

それでも自分の道を進みたい場合は、この質問で受け入れられた回答を確認する必要があります: Android-通知マネージャー、意図せずに通知を受け取る

このように使用することを明確に述べています

notification.setLatestEventInfo(context, contentTitle, contentText, PendingIntent.getActivity(getApplicationContext(), 0, new Intent(), 0));
于 2013-03-13T10:06:31.507 に答える