2016-05-14 39 views
0

我正在使用GCM将一些数据从我的服务器发送到我的应用程序。 消息传递工作正常。我在设备上即时收到每一次按摩。 但是,问题是:智能手机的显示屏关闭时不起作用。 也许它有s.th.与我的智能手机?我运行的是Android 5,其他应用程序的通知正常工作(如whatsapp)。Android在显示屏关闭时接收GCM

服务器数据:

{ 
"data": { 
"id": "5", 
"message": "test" 
}, 
"registration_ids": ["myRegId"], 
"priority": "high" 
} 

清单:

... 
     <receiver 
      android:name="com.google.android.gms.gcm.GcmReceiver" 
      android:exported="true" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="com.example.gcm" /> 
      </intent-filter> 
     </receiver> 
     <service 
      android:name=".GcmMessageHandler" 
      android:exported="false" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      </intent-filter> 
     </service> 
    </application> 
    <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.asdf.myapp.gcm.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="com.asdf.myapp.gcm.permission.C2D_MESSAGE" /> 

接收机:

public class GcmMessageHandler extends GcmListenerService { 
    @Override 
    public void onMessageReceived(String from, Bundle data) { 
     Log.d("test", "message received"); 
    } 
} 

回答

0

我发现,如果我连接到我的WLAN只出现问题。 禁用WLAN时,无论发生什么,我都会收到GCM消息。 我已阅读此reddit文章,并按照其似乎解决我的问题的说明。

Reddit

0

receiver类应该从WakefulBroadcastReceiver扩大到低保CPU是清醒的,使您的听众即使您的设备处于锁定状态,服务也可以完成其任务。

清单

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

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.oostaa.app.permission.C2D_MESSAGE" /> 

<receiver 
    android:name=".receiver.GcmBroadcastReceiver" 
    android:permission="com.google.android.c2dm.permission.SEND"> 
     <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <category android:name="com.oostaa.app" /> 
     </intent-filter> 
</receiver> 

注:com.oostaa.app是我的包名。

接收机:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     ComponentName comp = new ComponentName(context.getPackageName(), 
      GcmIntentService.class.getName()); 
     startWakefulService(context, (intent.setComponent(comp))); 
     setResultCode(Activity.RESULT_OK); 
    } 
} 
+0

还是同样的问题.. – Ant1Zykl0n