2

GCMをセットアップするために、http://developer.android.com/google/gcm/gs.htmlのチュートリアルに従っています。現在、デバイスを登録しようとしています。ただし、何らかの理由で、アプリケーションは常に gcm = GoogleCloudMessaging.getInstance(this); でクラッシュするようです。

スタックトレースは次を指しているようです: 06-18 13:42:20.909: I/dalvikvm(11613): メソッド com.google.android.gms.gcm.GoogleCloudMessaging.getInstance が見つかりませんでした。メソッド pushNotification.PushNotification$1 から参照されています。走る

ここに私がこれまでに持っているもののサンプルがあります

public PushNotification(Context c, Activity activity)
{
    context = c;
    this.activity = activity;
    regid = getRegistrationId(context);

    if (regid.length() == 0) {
        Log.d("IN PUSHNOTIFICATION ","NOT REGISTERED. REGISTERING NOW.....");
        registerBackground();
    }
    Log.d("IN PUSHNOTIFICATION ","REGISTRATION COMPLETE.....");
    Log.d("IN PUSHNOTIFICATION ","REGISTRATION ID IS: " + regid);
    gcm = GoogleCloudMessaging.getInstance(activity); //never reaches this code

}

private void registerBackground() {

    Thread thread = new Thread(new Runnable()
    {
        public void run()
        {
            String msg = "";
            try {
                if (gcm == null) {
                    Log.d("IN PUSHNOTIFICATION", "IN BACKGROUND. gcm == NULL");
                    gcm = GoogleCloudMessaging.getInstance(context);
                    Log.d("IN PUSHNOTIFICATION", "IN BACKGROUND. AFTER gcm.GETINSTANCE");
                }
                Log.d("IN PUSHNOTIFICATION", "IN BACKGROUND. BEFORE gcm.register");
                regid = gcm.register(SENDER_ID);
                msg = "Device registered, registration id=" + regid;
                Log.d("IN PUSHNOTIFICATION", "IN BACKGROUND. regid == " + regid);
                // You should send the registration ID to your server over HTTP,
                // so it can use GCM/HTTP or CCS to send messages to your app.

                // For this demo: we don't need to send it because the device
                // will send upstream messages to a server that echo back the message
                // using the 'from' address in the message.

                // Save the regid - no need to register again.
                setRegistrationId(context, regid);
            } catch (IOException ex) {
                Log.d("IN PUSHNOTIFICATION", "IN BACKGROUND. EXCEPTION ERROR ERROR: ex = " + ex.getMessage());
                msg = "Error :" + ex.getMessage();
            }
        }
    }
    );
    thread.start();
}

ここに完全なスタックトレースがあります

06-18 13:42:20.909: D/IN プッシュ通知 (11613): 登録されていません。登録中..... 06-18 13:42:20.909: I/dalvikvm(11613): メソッド com.google.android.gms.gcm.GoogleCloudMessaging.getInstance が見つかりませんでした。メソッド pushNotification.PushNotification$1.run から参照されています06-18 13:42:20.909: W/dalvikvm(11613): VFY: 静的メソッドを解決できません 5967: Lcom/google/android/gms/gcm/GoogleCloudMessaging;.getInstance (Landroid/content/Context;)Lcom/google /android/gms/gcm/GoogleCloudMessaging; 06-18 13:42:20.909: D/dalvikvm(11613): VFY: オペコード 0x71 を 0x0015 に置き換える 06-18 13:42:20.909: I/dalvikvm(11613): メソッド com.google.android.gms が見つかりませんでした.gcm.GoogleCloudMessaging.register、メソッド pushNotification.PushNotification$1.run 06-18 13:42:20.909 から参照: W/dalvikvm(11613): VFY: 仮想メソッド 5969 を解決できません: Lcom/google/android/gms/gcm/GoogleCloudMessaging;.register ([Ljava/lang/String;)Ljava/lang/String; 06-18 13:42:20.909: D/dalvikvm(11613): VFY: オペコード 0x6e を 0x0039 に置き換えます 06-18 13:42:20.909: D/IN プッシュ通知 (11613): 登録完了..... 06-18 13:42:20.909: D/IN PUSHNOTIFICATION(11613): 登録 ID は: 06-18 13:42:20.909: D/AndroidRuntime(11613): VM 06-18 をシャットダウンしています 13:42:20.909: W/dalvikvm( 11613): threadid=1: キャッチされない例外で終了するスレッド (group=0x2b542210) 06-18 13:42:20.909: D/IN PUSHNOTIFICATION (11613): バックグラウンドで。gcm == NULL 06-18 13:42:20.909: W/dalvikvm(11613): threadid=20: キャッチされない例外で終了するスレッド (group=0x2b542210) 06-18 13:42:20.909: I/Process(11613):信号を送信しています。PID: 11613 SIG: 9 06-18 13:42:20.919: I/ActivityManager(278): プロセス com.

4

3 に答える 3

4

問題を解決しました。google-play-services_lib プロジェクトにリンクしていましたが、jar ファイル google-play-services_lib.jar もプロジェクトに追加する必要がありました。

于 2013-06-19T05:29:37.410 に答える
1

私のように、他の人はこのバグに夢中になるかもしれません。これらの次のエラーは同じことを意味します。

メソッド com.google.android.gms.gcm.GoogleCloudMessaging.getInstance java.lang.NoClasDefFound が見つかりませんでした: .....GoogleCloudMessaging

GoogleCloudMessaging クラスの jar ファイルは、Android ランタイムにエクスポートされません。

デフォルトでは、Android ビルダーは jar ファイルをエクスポートしないためです。Android Private Library

<-- そのファイルは実行時にエクスポートされていませんbin/dexedLibsgoogle-play-services-4064834317375a1fffbbc48c3994c697.jar

解決策: これで、すべてのProject Properties/Java Build Path/Order and Export/ jarAndroid Private Library ファイルが Android デバイスに取り込まれ、ランタイム エラーが発生しなくなります。

于 2013-06-25T17:52:54.113 に答える
0

Microsoft Azure プラットフォームを介してプッシュ通知を使用していますが、同じ問題に直面しました。

ここで 8 つの手順を確認して問題を解決しました: http://azure.microsoft.com/en-us/documentation/articles/mobile-services-android-get-started-push/#add-push

google-play-services-libより正確には、jarファイルを追加しても、ライブラリが正しく追加されていないことが問題でした(手順6および7)

于 2014-05-07T00:05:25.297 に答える