2013-01-24 67 views
1

我對Android開發不是很有經驗,我會將gcm包含到現有的應用程序中。 到目前爲止,我可以註冊所有設備,並收到registrationId。問題是,我從來沒有在Android 4.0設備上輸入onMessage()方法。我也用Galaxy Note 2(Android 4.1)試過了,我可以收到這條消息。 我沒有收到任何錯誤消息,我只是從來沒有輸入onMessage()。GCM - 永遠不要通過Android 4.0設備輸入onMessage()設備

當我發送消息時,我總是收到一個messageId,所以gcm「接受」了消息。但它絕不會傳遞到設備。

我怎樣才能找出問題所在?在此先感謝

GCMIntentService.java

public class GCMIntentService extends GCMBaseIntentService { 

public GCMIntentService() { 
    super("82........"); 
} 

@Override 
protected void onError(Context arg0, String error) { 
    System.out.println("Not able to register or unregister because: " 
      + error); 

} 

@Override 
protected void onMessage(Context context, Intent intent) { 

    String message = intent.getStringExtra("message"); 

    System.out.println("GCM DELIVERED MESSAGE TO DEVICE:" + message); 
} 

@Override 
protected void onRegistered(Context arg0, String regId) { 
    System.out.println("Device is registered with RegisterId: " + regId); 
} 

@Override 
protected void onUnregistered(Context arg0, String regId) { 
    System.out.println("Device with RegisterId: " + regId 
      + " has unregistered"); 
} 

@Override 
protected boolean onRecoverableError(Context context, String errorId) { 
    System.out.println("Entered onRecoverableError"); 
    return super.onRecoverableError(context, errorId); 
} 
} 

我的Manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.activities" 
android:versionCode="1" 
android:versionName="1.0" > 

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

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<permission 
    android:name="com.example.activities.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="com.example.activities.permission.C2D_MESSAGE" /> 
<!-- App receives GCM messages. --> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<!-- GCM connects to Google Services. --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<!-- GCM requires a Google account. --> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<!-- Keeps the processor from sleeping when a message is received. --> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 

    <!-- Activity which is called first to decide which Activity comes next --> 
    <activity 
     android:name=".StartUp" 
     android:label="@string/title_activity_start_up" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".Login" 
     android:label="@string/title_activity_login" > 
    </activity> 
    <activity 
     android:name=".DisplayContent" 
     android:label="@string/title_activity_display_content" > 
    </activity> 
    <activity 
     android:name=".AllSigns" 
     android:label="@string/title_activity_all_signs" > 
    </activity> 

    <receiver 
     android:name="com.google.android.gcm.GCMBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 

      <category android:name="com.example.activities" /> 
     </intent-filter> 
    </receiver> 

    <service android:name=".GCMIntentService" /> 

</application> 

我的第一個活動的()代碼的onCreate(Startup.java)

GCMRegistrar.checkDevice(this); 
GCMRegistrar.checkManifest(this); 
final String regId = GCMRegistrar.getRegistrationId(this); 

if (regId.equals("")) { 
System.out.println("Id ist leer, Device wird neu registriert"); 
GCMRegistrar.register(this, "825134311331"); 
} else { 
System.out.println("This device is already registered"); 
} 
+0

在你貼我沒有看到你發送的註冊ID,以應用程序服務器的代碼,你在做這個指定的包?同時發佈GCM在發送郵件時返回給您的信息。 – selsine

回答

0

如果您嘗試通過WIFI,確保端口5228沒有被網絡阻塞。這就是爲什麼我解決了我試圖讓它工作多日的問題,而不是我想承認的問題。

0

確保GCMIntentService類是在你的清單