2012-05-14 124 views
0

我有一個使用C2DM的Android應用程序。我在主要活動中定義接收者(不在清單中)。我有這樣的事情:C2DM自動註銷

c2dmReceiver = new BroadcastReceiver() { 
@Override 
public void onReceive(Context context, Intent intent) { 
String action = intent.getAction(); 

if (action.equals("com.google.android.c2dm.intent.REGISTRATION")) { 
    String registrationId = intent.getStringExtra("registration_id"); 
    String error = intent.getStringExtra("error"); 
    String unregistered = intent.getStringExtra("unregistered"); 
    System.out.println("receiver registration: " + registrationId); 
    System.out.println("unregister aplicacion: " + unregistered); 

    if (registrationId != null){ 
     saveConfig("key", registrationId); 
    postC2dm(registrationId); 
     } 
} 
else 
    if (action.equals("com.google.android.c2dm.intent.RECEIVE")){ 
     final String payload = intent.getStringExtra("payload"); 
     System.out.println("Package : " + intent.getPackage()); 
     } 
    } 
}; 
IntentFilter filtroReceiver = new  IntentFilter("com.google.android.c2dm.intent.REGISTRATION"); 
filtroReceiver.addAction("com.google.android.c2dm.intent.RECEIVE"); 
filtroReceiver.addCategory("es.unizar.c2dm"); 
registerReceiver(c2dmReceiver,filtroReceiver,"com.google.android.c2dm.permission.SEND",null); 

清單文件:

<uses-permission android:name="mypackage.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.VIBRATE"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK"/> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
<uses-permission android:name="com.google.android.c2dm.permission.SEND" /> 

我的問題是:當我收到過的意圖「com.google.c2dm.intent.RECEIVE」,「有效載荷」 ,我收到正確的數據「負載」,但我收到一個registrationId = null,我的類別未註冊(在「com.google.c2dm.intent.registration」操作中)。

出現是警告:

未授予權限com.google.android.c2dm.permission.SEND打包es.mypackage.es(的ProtectionLevel = 3個標誌= 0xbe46)

[DataMsgMdr]廣播意圖回調:結果=取消意圖{行爲= com.google.c2dm.intent.RECEIVE貓= es.mypackage.es(具有額外)

接收機包沒有找到,註銷應用es.mypackage.es發件人發送方@gm ...

謝謝。 此致敬禮。

回答

2

這是因爲您的帳戶並未註冊。你肯定,你在你的發件人地址。使用您在註冊時向C2DM輸入了相同的Package Name輸入正確的C2DM 註冊賬號......

1

我不明白的是爲什麼你不定義在廣播接收器清單。在活動中定義它意味着C2DM僅在您的應用程序(特定)活動加載時起作用(我假設您的代碼類似於Where to register a BroadcastReceiver (Activity lifecycle fun))。

但你並不需要C2DM這種情況下,你可以打開你的服務器的有效連接。 C2DM的整體思想是,即使未加載應用程序,它也能夠觸發您的應用程序。有關指南,請參閱https://stackoverflow.com/a/8943715/734687