无法在后台的某些android设备中接收GCM通知

无法在后台的某些android设备中接收GCM通知,android,Android,事实上,我的应用程序运行良好,能够接收GCM推送通知,但有些设备只有在我的应用程序处于后台时才在GCMinentService中接收GCM通知。设备都是胡外荣誉,小米的一些型号。下面是我的代码,如果有人之前遇到过这个问题,请告诉我。有人能帮我吗 Android清单文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/androi

事实上,我的应用程序运行良好,能够接收GCM推送通知,但有些设备只有在我的应用程序处于后台时才在GCMinentService中接收GCM通知。设备都是胡外荣誉,小米的一些型号。下面是我的代码,如果有人之前遇到过这个问题,请告诉我。有人能帮我吗

  • Android清单文件:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.app.testapp"
    android:installLocation="preferExternal"
    android:versionCode="41"
    android:versionName="4.1.7" >
    
    <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="19" />
    
    <uses-permission android:name="android.permission.INTERNET" />
    
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
    
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    
    <permission
    android:name="com.app.testapp.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
    
    <uses-permission android:name="com.app.testapp.permission.C2D_MESSAGE" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    
    <supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:resizeable="true"
    android:smallScreens="true"
    android:xlargeScreens="true" />
    
    <application
    android:name="com.app.testapp.MyApplication"
    android:allowBackup="true"
    android:hardwareAccelerated="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/SampleTheme">
    
    <activity
        android:name="com.app.testapp.activity.SplashActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/ActivityTheme">    
    
       <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    
    <!-- GCM -->
    <receiver
        android:name="com.app.testapp.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.app.testapp" />
      </intent-filter>
    </receiver>
    
    <!-- Services -->
    <service android:name="com.app.testapp.GCMIntentService" />
    
  • 服务:

    package com.app.testapp;
    
    import android.content.Context;
    import android.content.Intent;
    import com.app.testapp.util.Constants;
    import com.app.testapp.util.Logger;
    import com.google.android.gcm.GCMBaseIntentService;
    
    public class GCMIntentService extends GCMBaseIntentService {
    
    private static String TAG = "GCM";
    
        public MyGCMIntentService() {
        super(Constants.SENDER_ID);
        }
    
        @Override
        protected void onError(Context arg0, String arg1) {
        Logger.logger(TAG, "onError");
    
        }
    
        String message = null;
    
        @Override
        protected void onMessage(Context context, Intent intent) {
    
            message = intent.getExtras().getString("message");
            Logger.logger(TAG, "onMessage message=" + message);
    
        }
    
        @Override
        protected void onRegistered(Context arg0, String arg1) {
            Logger.logger(TAG, "onRegistered");
    
        }
    
       @Override
       protected void onUnregistered(Context arg0, String arg1) {
             Logger.logger(TAG, "onUnregistered");
       }
    }
    

  • 据介绍,我想你可以在
    上阅读扩展WakefulBroadcastReceiver的现有应用程序,谷歌建议迁移到GCMReceiver和GcmListenerService。
    tipsI尝试过,并根据最新和谷歌的建议更改所有内容。它适用于除huwai荣誉外的所有设备。无法解决,,
    package com.app.testapp;
    
    import android.content.Context;
    import android.content.Intent;
    import com.app.testapp.util.Constants;
    import com.app.testapp.util.Logger;
    import com.google.android.gcm.GCMBaseIntentService;
    
    public class GCMIntentService extends GCMBaseIntentService {
    
    private static String TAG = "GCM";
    
        public MyGCMIntentService() {
        super(Constants.SENDER_ID);
        }
    
        @Override
        protected void onError(Context arg0, String arg1) {
        Logger.logger(TAG, "onError");
    
        }
    
        String message = null;
    
        @Override
        protected void onMessage(Context context, Intent intent) {
    
            message = intent.getExtras().getString("message");
            Logger.logger(TAG, "onMessage message=" + message);
    
        }
    
        @Override
        protected void onRegistered(Context arg0, String arg1) {
            Logger.logger(TAG, "onRegistered");
    
        }
    
       @Override
       protected void onUnregistered(Context arg0, String arg1) {
             Logger.logger(TAG, "onUnregistered");
       }
    }