1

そのため、Android の下位バージョンで実行されているデバイスの GCM には、この非常に奇妙な問題があります。GCM が有効になっている Android ライブラリ プロジェクトがあります。これを jar としてエクスポートし、テスト アプリケーションに含めます。API レベル 17 のデバイスとエミュレーターでは正常に動作し、デバイスは正常に登録されますが、それ以下では動作しません。ここで奇妙な部分があります: ライブラリ プロジェクトをスタンドアロン プロジェクトとして実行すると、API レベル 10 を含むすべてのデバイスで正常に動作します。

注: ライブラリを使用することは私にとって重要です。

編集:
これは私のログキャットにあるものです:

    D/GCMRegistrar(505): resetting backoff for com.example.gcmtest
    V/GCMRegistrar(505): Registering app com.example.gcmtest of senders 378013620721

そしてそれ以上の応答はありません。

4

1 に答える 1

3

わかりました、私は自分でそれを理解しました。将来誰かがこの問題に直面した場合に備えて。
問題が何であったかを説明しようとします。
だから私は GCM と統合されたライブラリプロジェクトを持っていましたcom.test.gcm-librarycom.example.gcmtestなどの別のアプリケーション プロジェクトでこのライブラリを使用したかったのです。ここで受け入れられた回答に従うことで、 com.example.gcmtestでライブラリを正常に使用できました事業。API レベル 17 では問題なく動作しましたが、API レベル 10 で試してみると、質問に投稿したように GCMIntenetService メソッドが呼び出されず、応答も生成されませんでしたが、最終的に修正できました。秘訣は、マニフェスト ファイルでレシーバーのインテント カテゴリを変更することでした。正確には、 com.example.gcmtestのマニフェスト ファイルのレシーバー宣言を次のように変更しました 。

    <receiver
        android:name="com.test.gcm-library.MyCustomBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>

            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.test.gcm-library" />
        </intent-filter>
    </receiver>  

これに:

    <receiver
        android:name="com.test.gcm-library.MyCustomBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>

            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <!-- Receives the registration id. -->
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="com.example.gcmtest" />
        </intent-filter>
    </receiver>

理由はわかりませんが、API 17 の受信者カテゴリ フィールドは「ドント ケア」条件のように見えましたが、下位の API ではこれを機能させるために私がしなければならなかったことです。

于 2013-08-29T14:06:51.640 に答える