2011-11-06 140 views
0

我在实施C2DM注册时遇到了一些麻烦。我的BroadcastReceiver从未被调用过。Android C2DM注册,BroadCastReceiver从未呼吁

我正在使用模拟器(Google API(Google Inc.) - API Level 8)设置我的Gmail帐户。它似乎工作,因为Thomas Malmsten的BroadcastReceiver示例在我的模拟器上正常工作(link)。

Here is my manifest : 

<permission android:name="my.package.permission.C2D_MESSAGE" android:protectionLevel="signature"></permission> 
<uses-permission android:name="my.package.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
<uses-sdk android:minSdkVersion="8" /> 

<application android:name=".utils.MyApp" ...> 

    <receiver android:name=".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="my.package" /> 
     </intent-filter> 
     <!-- Receive the registration id --> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
      <catemgory android:name="my.package" /> 
     </intent-filter> 
    </receiver> 

    <activity android:name=".views.LoginScreen" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <!-- lots of activities --> 
    <!-- lots of services --> 

</application> 

现在,我只想写在logcat的东西。

My Broadcast Receiver 
package my.package; 

import ...; 

public class C2DMBroadCastReceiver extends BroadcastReceiver { 

    @Override 
    public final void onReceive(Context context, Intent intent) { 
     Log.d("C2DMBroadCastReceiver ", "Received something from Google."); 
     if (intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) { 
      Log.d("C2DMBroadCastReceiver ", "Received a registration ID from Google."); 
     } else if (intent.getAction().equals("com.google.android.c2dm.intent.RECEIVE")) { 
      Log.d("C2DMBroadCastReceiver ", "Received a C2DM message from Google."); 
     } 
    } 
} 

这里是我的注册fonction:

Context context = MyApp.getAppContext(); 
      Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER"); 
      registrationIntent.putExtra("app", PendingIntent.getBroadcast(context, 0, new Intent(), 0)); 
      registrationIntent.putExtra("sender", "[email protected]"); 
      Log.w("Register", "Intent to register"); 
      context.startService(registrationIntent); 

Finaly的logcat的:

W/Register( 344): Intent to register 
I/ActivityManager( 58): Starting activity: Intent { cmp=my.package/.views.Conver 
sationList } 
D/GoogleLoginService( 173): onBind: Intent { act=android.accounts.AccountAuthen 
ticator cmp=com.google.android.gsf/.loginservice.GoogleLoginService } 
D/dalvikvm( 173): GC_FOR_MALLOC freed 4630 objects/378200 bytes in 133ms 
D/dalvikvm( 344): GC_FOR_MALLOC freed 1799 objects/279192 bytes in 95ms 
D/NativeCrypto( 344): Freeing OpenSSL session 
I/ActivityManager( 58): Displayed activity my.package/.views.ConversationList: 1 
352 ms (total 1352 ms) 
D/dalvikvm( 344): GC_EXTERNAL_ALLOC freed 2170 objects/476328 bytes in 90ms 
D/dalvikvm( 344): GC_FOR_MALLOC freed 6985 objects/461360 bytes in 151ms 
D/dalvikvm( 344): GC_FOR_MALLOC freed 612 objects/32376 bytes in 153ms 
I/dalvikvm-heap( 344): Grow heap (frag case) to 3.239MB for 87396-byte allocati 
on 
D/dalvikvm( 344): GC_FOR_MALLOC freed 24 objects/1736 bytes in 51ms 
D/dalvikvm( 344): GC_FOR_MALLOC freed 0 objects/0 bytes in 146ms 
I/dalvikvm-heap( 344): Grow heap (frag case) to 3.321MB for 87396-byte allocati 
on 
D/dalvikvm( 344): GC_FOR_MALLOC freed 0 objects/0 bytes in 53ms 
D/NativeCrypto( 344): Freeing OpenSSL session 
D/dalvikvm( 344): GC_FOR_MALLOC freed 1080 objects/244032 bytes in 122ms 
I/global ( 344): Default buffer size used in BufferedReader constructor. It wo 
uld be better to be explicit if an 8k-char buffer is required. 
D/dalvikvm( 344): GC_FOR_MALLOC freed 1077 objects/120272 bytes in 53ms 
I/dalvikvm-heap( 344): Grow heap (frag case) to 3.506MB for 87396-byte allocati 
on 
D/dalvikvm( 344): GC_FOR_MALLOC freed 375 objects/24096 bytes in 52ms 
D/dalvikvm( 344): GC_FOR_MALLOC freed 3 objects/104 bytes in 49ms 
I/dalvikvm-heap( 344): Grow heap (frag case) to 3.567MB for 87396-byte allocati 
on 
D/dalvikvm( 344): GC_FOR_MALLOC freed 0 objects/0 bytes in 146ms 
D/dalvikvm( 344): GC_FOR_MALLOC freed 1 objects/16 bytes in 49ms 
I/dalvikvm-heap( 344): Grow heap (frag case) to 3.733MB for 87396-byte allocati 
on 
D/dalvikvm( 344): GC_FOR_MALLOC freed 0 objects/0 bytes in 146ms 
I/global ( 344): Default buffer size used in BufferedReader constructor. It wo 
uld be better to be explicit if an 8k-char buffer is required. 

对不起所有的代码,但我真的不知道这是怎么回事!

谢谢 马蒂厄

PS:这不是一个Nexus One的工作无论是。

回答

0

真的很愚蠢的错误:在清单中的catemgory而不是类别。