0

このガイドを使用しました。しかし、それを別のプロジェクトに追加すると、何も受け取りません:マニフェストに変更を加えたので、ガイドと一致します(私は思う):

質問: しかし、登録しようとしても何の反応もありません。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.vogella.android.c2dm" android:versionCode="1"
    android:versionName="1.0">
    <permission android:name="de.vogella.android.c2dm.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="de.vogella.android.c2dm.permission.C2D_MESSAGE" />
    <!-- Permissions -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />


    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
        <activity android:name="RegisterActivity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service android:name="de.vogella.android.c2dm.C2DMReceiver" />

        <!-- Only C2DM servers can send messages for the app. If permission is 
            not set - any other app can generate it -->
        <receiver android:name="com.google.android.c2dm.C2DMBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND">
            <!-- Receive the actual message -->
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <category android:name="de.vogella.android.c2dm" />
            </intent-filter>
            <!-- Receive the registration id -->
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                <category android:name="de.vogella.android.c2dm" />
            </intent-filter>
        </receiver>
        <activity android:name="ResultActivity"></activity>
    </application>
</manifest>

登録開始方法(if条件に到達することを確認済み)(C2DM2Activityから呼び出される):

public void checkRegistered() {
        String registered = C2DMessaging
                .getRegistrationId(getApplicationContext());
        if (registered.equals("")) {
            Log.i(TAG, "starting registration of C2DM");
            C2DMessaging.register(this, C2DMID);
        }
    }

ファイル構造:

ファイル構造

4

5 に答える 5

1

「.」を追加するとどうなりますか あなたのサービス名に、それがあるべきだと思います。

これを試して<service android:name=".c2dm.C2DMReceiver" />

于 2012-05-21T08:24:14.653 に答える
1

コード部分で。C2DMBaseReceiver には、C2DMReceiver がアプリケーション パッケージの既定のフォルダーにあると定義されている場所があります。

助けようとしてくれた他のすべての人に感謝します。

于 2012-05-22T06:47:59.170 に答える
0

上記のコメントで、それC2DMBroadcastReceiverがあなたの受信機であると述べました。C2DMReceiverでは、あなたのde.vogella.android.c2dmパッケージにあるのは何ですか?

そして、あなたの質問は、登録を開始する方法についてです。セクション2.2のチュートリアルで。モバイル アプリの登録 ID を取得するregisterには、呼び出す必要があるメソッドがあります。registrationIdが Google サーバーから戻ってくると、レシーバーのonReceive. 彼のチュートリアルでは、登録する受信者はC2DMRegistrationReceiver. それC2DMBroadcastReceiverがあなたの受信者であり、それについて確信がある場合は、registerを呼び出すだけonReceiveでメッセージを受信するはずです。

また、Manifest.xml 全体を投稿してみてください。INTERNET のアクセス許可と、次のようなカスタム アクセス許可を使用していることを確認してください。

<permission
    android:name="de.vogella.android.c2dm.simpleclient.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<uses-permission 
    android:name="de.vogella.android.c2dm.simpleclient.permission.C2D_MESSAGE" />
于 2012-05-21T09:08:31.293 に答える
0

登録したパッケージ名C2DMは、転送した他のプロジェクトと同じです。これは、C2DM の場合、そのPackage名前でアプリを識別するためです。

于 2012-05-21T09:12:13.860 に答える
0

変更してみる

android:name="com.google.android.c2dm.C2DMBroadcastReceiver"

android:name="dk.lector.cms.c2dm.YourReceiverClassName"
于 2012-05-21T08:20:03.177 に答える