6

C2DMフレームワークをテストしようとしています。数日前に確認メールを受け取った後、登録できるクライアントを作成しようとしました。そのために、このチュートリアルで説明されている手順に従って簡単なクライアントを作成しました:http ://code.google.com/intl/es-419/android/c2dm/index.html 。

Androidマニフェストファイルには、特に次のコードが含まれています。

<permission android:name="com.bilthon.ufrj.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.bilthon.ufrj.permission.C2D_MESSAGE" />

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<uses-permission android:name="android.permission.INTERNET"/>

<receiver android:name=".C2DMReceiver" android:permission="com.google.android.c2dm.permission.SEND">

<intent-filter>
   <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
   <category android:name="com.bilthon.ufrj" />
</intent-filter>

<intent-filter>
   <action android:name="com.google.android.c2dm.intent.RECEIVE" />
   <category android:name="com.bilthon.ufrj" />
</intent-filter>
</receiver>

そして、プログラムの開始時に起動されるメインアクティビティには、次のコードがあります。

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // boilerplate
registrationIntent.putExtra("sender","mytestemail@gmail.com");
Log.d("WelcomeScreen","mytestemail@gmail.com");
startService(registrationIntent);

また、必要だと言われたので、クライアントを実行しているAVDにGoogleアカウントを登録しました。しかし、問題は、放送受信機を「ウェイクアップ」させることができないことです。何が悪いのかわかりません。ログを分析すると、登録インテントが作成され、明らかに正しく使用されていることがわかりますが、レシーバーコードが実行されることはありません。何が問題になっている可能性がありますか?

事前に感謝しますネルソン

4

4 に答える 4

9

さて..ちょうどそれを整理しました、問題は受信者の宣言にありました。ここに示されているように、レシーバーのタグはアプリケーションタグ内に配置する必要があります:http://developer.android.com/guide/topics/manifest/manifest-intro.html

これは、C2DMアプリケーション用に適切にフォーマットされたマニフェストの例です。android-c2dmグループにリンクを投稿してくれたMarkMurphyに感謝します。

そして、ばかげた間違いでごめんなさい。

ネルソン

于 2010-09-08T23:08:39.653 に答える
3

しばらくの間それと格闘した後、私はちょうどこれを自分で動かしました。

マニフェストには、次の行があります

<receiver android:name=".C2DMReceiver" android:permission="com.google.android.c2dm.permission.SEND">

つまり、c2dmパッケージのC2DMBaseReceiverを拡張するC2DMReceiverというクラスが必要です。これを実装するために、c2dmパッケージとC2DMReceiver.javaファイルの両方をchrometophone-androidの例からプロジェクトにコピーし、意図したとおりにC2DMサーバーから登録IDを取得できました。

于 2010-09-09T05:38:46.230 に答える
2

私も同じ問題を抱えていました。私の解決策は、マニフェストのすべてのアクセス許可をアプリケーションタグの上に移動することでした。

于 2011-10-06T20:45:39.957 に答える
1

確認できること:

1 C2DM権限を宣言していることに気づきましたが、次のようにアプリケーションで使用しないでください。

<uses-permission android:name="com.bilthon.ufrj.permission.C2D_MESSAGE" />

2 c2dmライブラリを見ると、ヘルパーC2DMessagingregisterメソッドがへの追加の呼び出しでインテントを作成していることがわかりますsetPackage

registrationIntent.setPackage("com.google.android.gsf");
于 2010-09-06T15:54:19.800 に答える