2014-02-11 26 views
2

我已經實現了GCM服務,並且它一切正常,但當我關閉應用程序後應該收到通知時(通過長按Home鍵,然後在垃圾圖標 - Galaxy S III),我沒有收到它。GCM BroadcastReceiver只有當應用程序正在運行或在後臺運行時纔會觸發

這裏是我的的Manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.proj" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="12" 
     android:targetSdkVersion="18" /> 
    <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="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <!-- The following two permissions are not required to use 
     Google Maps Android API v2, but are recommended. --> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <permission android:name="com.example.proj.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 
    <uses-permission android:name="com.example.proj.permission.C2D_MESSAGE" /> 


    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/projicon" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.Sherlock" 
     android:uiOptions="splitActionBarWhenNarrow" > 
     <activity 
      android:name="com.example.proj.FbActivity" 
      android:label="@string/app_name" 
      android:configChanges="keyboardHidden|orientation|screenSize" 
      android:uiOptions="splitActionBarWhenNarrow"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
      <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 
      <meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="APIKEY"/> 
     <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> 
     <activity android:name="com.facebook.LoginActivity"></activity> 
     <activity android:name="MainActivity" 
      android:configChanges="keyboardHidden|orientation|screenSize"></activity> 

     <receiver 
      android:name="com.example.proj.GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.example.proj" /> 
      </intent-filter> 
     </receiver> 
     <service android:name="com.example.proj.GcmIntentService" /> 
    </application> 
</manifest> 

GcmBroadcastReceiver.java:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Explicitly specify that GcmIntentService will handle the intent. 
     ComponentName comp = new ComponentName(context.getPackageName(), 
       GcmIntentService.class.getName()); 
     // Start the service, keeping the device awake while it is launching. 
     startWakefulService(context, (intent.setComponent(comp))); 
     setResultCode(Activity.RESULT_OK); 
    } 

} 

我不知道如果通過我做的方式關閉應用程序殺死應用程序成功或者它仍然應該在後臺運行,並接受這些masseges。

+0

[Android GCM(推送通知):設備在應用程序停止時未收到通知]的可能重複(http://stackoverflow.com/questions/12073449/android-gcm-push-notification-device-doesnt- receive-notification-if-applicat) – Eran

+0

我已經看到了這個問題,但據我所知,我已經閱讀過,這種類型的關閉不應該關閉正在運行的後臺進程/服務。這就是爲什麼我指出這種具體的方式,而不是通過設置等終止進程... – Juvi

回答

6

我有同樣的問題,我發現我做的清單文件出錯:

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

應該是:

<permission android:name="<your app package>.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="<your app package>.permission.C2D_MESSAGE" /> 

在應用程序包是包含包類擴展Application(並且應該指向清單文件)。

解決此問題後,我已經能夠強制關閉我的應用程序,並仍然通過GCM接收推送通知。

+0

解決了我的問題,謝謝Marco! – Juvi

+1

這並沒有解決我的問題。你能幫我嗎?對於哪些包裹,我用包裹名稱替換包裹名稱?僅限於許可.C2D_MESSAGE? –

相關問題