0

Android アプリでプッシュ通知を機能させようとしています。Android 4 デバイスで通知を受け取るので、サーバーは問題ないようです。しかし、通知を受信しないAndroid 2.2.1および2.3.4を搭載した他のデバイスがあります。

ここに私の C2DMReceiver があります:

package vex.android;

import java.io.IOException;

import vex.android.settings.Local;
import vex.android.tool.Resources;
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.c2dm.C2DMBaseReceiver;

public class C2DMReceiver extends C2DMBaseReceiver {

    public C2DMReceiver() {
        super(Local.PushNotificationEmail);
    }

    @Override
    public void onError(Context context, String errorId) {
        Log.e("VEX-PUSHNOTIFICATION", "Error " + errorId);
    }

    @Override
    protected void onMessage(Context context, Intent intent) {

        String saleTitle = Resources.getString("pushnotificationtitle", context); 
        String saleMessage = intent.getStringExtra("salemessage");
        String SaleId = intent.getStringExtra("saleid");
        String isMultiSale = intent.getStringExtra("ismultisale");

        Boolean multisale = (isMultiSale != null && isMultiSale.length()>0) ?  Boolean.parseBoolean(isMultiSale.trim()) : false;
        Integer saleid = (SaleId != null && SaleId.length()>0) ? Integer.parseInt(SaleId.trim()) : -1;
        if(saleMessage == null || saleMessage.length() <= 0 ) saleMessage = Resources.getString("pushnoticationmessage", context);
        createNotification(context, saleTitle, saleMessage, saleid, multisale);
    }

    public void createNotification(Context context,String SaleTitle, String SaleMessage, Integer saleid, Boolean multisale) {

        NotificationManager notificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        Notification notification = new Notification(R.drawable.applicationicon,
                "Message received", System.currentTimeMillis());
        // Hide the notification after its selected
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        Intent intent = new Intent(context, MainApplication.class);
        intent.putExtra("saleid", saleid);
        intent.putExtra("ismultisale", multisale);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // without flag a changed saleid wont be passed
        notification.setLatestEventInfo(context, SaleTitle, SaleMessage, pendingIntent);
        notificationManager.notify(saleid, notification);
    }

    @Override
    public void onRegistered(Context context, String registrationId) 
    throws IOException 
    {
        Local.setRegistrationId(registrationId);
    }

    @Override
    public void onUnregistered(Context context) 
    {
            Log.i("VEX-DEBUG", "successfully unregistered with C2DM server");
    }

}

手動で(curlを使用して)通知を送信すると、Android 2.2および2.3では機能しないため、問題があると思います。何か案が?ありがとう

4

2 に答える 2

2

古い Android バージョンのデバイスで C2DM を使用しても問題はありませんでした。

テストするデバイスを増やしてコードを確認することをお勧めします。問題は、古いデバイスに対する C2DM サポートの欠如の問題ではありません。v2.2 以降の Android で動作します。

于 2012-04-18T08:28:36.627 に答える
1

C2DM は Google Messaging Service を使用しています。GTalk もこのサービスを使用します。このサービスがオフになっている場合があります。すべての関連情報を確認するには、次のコードを入力するだけです - *#*#8255#*#*

C2DM は、android >= 2.2 を搭載したデバイスで利用できます。

于 2012-04-18T08:37:33.567 に答える