2012-04-26 96 views
1

我試圖在我的應用中實現推送通知,但似乎我的C2DMReceiver無法正常工作。我嘗試了所有我能找到的解決方案。以下是我有:權限拒絕:接收意圖{act = com.google.android.c2dm.intent.REGISTRATION

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" /> 

<permission android:name="com.my.app.permission.C2D_MESSAGE" android:protectionLevel="signature"/> 

<uses-permission android:name="com.my.app.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.ACCESS_NETWORK_STATE"/> 

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

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

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

<activity>....</activity> 

<service android:name=".C2DMReceiver"/> 
<receiver 
      android:name="com.google.android.c2dm.C2DMBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND"> 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE"/> 
     <category android:name="com.my.app"/> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> 
     <category android:name="com.my.app"/> 
    </intent-filter> 
</receiver> 

在我的onCreate方法我用: C2DMessaging.register(這一點, 「[email protected]」);

String id = C2DMessaging.getRegistrationId(this); 

而id始終爲空。 望着logcat的,我可以看到權限拒絕:接收意向{行動= com.google.android.c2dm.intent.REGISTRATION所以,我應該怎麼辦謝謝)

+0

HM,看起來完全一樣的是爲我工作的代碼 - 你可以把完整的清單?尤其對包=「XXX」部分感興趣... – ligi 2012-04-27 12:17:30

+0

請問您可以從C2DMessaging發佈**註冊**方法嗎? – 2012-05-02 11:35:30

回答

1

更改android:namereceiver標籤從com.google.android.c2dm.C2DMBroadcastReceivercom.my.app.YourReceiverClassName,並確保您的發件人電子郵件和服務器端登錄電子郵件是相同的。

+0

我也使用com.google.android.c2dm.C2DMBroadcastReceiver爲我的應用程序,它在那裏工作 - 所以不能成爲原因 – ligi 2012-04-27 12:11:17

1

接收器中的android:name必須指定實現接收器的類的路徑。我確信您的C2DMBroadcastReceiver類不在com.google.android.c2dm包中,因爲我在下面看到您正在使用com.my.app包。

創建一個C2DMBroadcastReceiver類,例如,com.my.app.receiver並指定接收器的adroid:name爲:

<receiver 
     android:name="com.my.app.receiver.C2DMBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND"> 
     ...... 
</receiver>