2012-07-31 2 views
12

Je développe une application GCM. Tout fonctionne correctement lorsque l'appareil n'est pas inactif (c'est-à-dire que vous dormez en appuyant sur le bouton d'alimentation). Cependant, lorsque j'envoie le message lorsque l'appareil est inactif, l'appareil ne se réveille pas.GCM ne s'éveille pas appareil

Je l'ai fait ce qui suit:

  1. vérifié que delay_while_idle n'est pas définie sur true dans l'application serveur
  2. utilisé une clé d'effondrement différent pour chaque message
  3. Redémarré l'appareil plusieurs fois
  4. Essayé d'omettre le delay_while_idle complètement du côté du serveur - il n'a aucun effet

I suis ciblant Android 2.2 api niveau 8 (version la plus basse), tester sur un périphérique réel fonctionnant sous Android 2.3.6

L'appareil utilise le Wi-Fi, il n'y a pas de carte SIM - mais reçoit des messages bien en cours d'exécution et ne pas inactif.

C'est la section d'autorisation manifeste client:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<permission 
    android:name="com.tranwall.sdk.device.android.permission.C2D_MESSAGE" 
android:protectionLevel="signature" /> 
<uses-permission android:name="basePackage.android.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />   
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

Merci à l'avance pour toute aide

Répondre

4
problème

dans les fichier manifest only.Make que les éléments suivants sont le contenu du GCM fichier manifeste

<permission 
    android:name="packagename.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="packagename.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.WAKE_LOCK" /> 

<application> 
    <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="packagename" /> 
     </intent-filter> 
    </receiver> 
    <service android:name=".GCMIntentService" android:enabled="true" /> 
</application> 
+0

Salut koti, J'ai la configuration similaire pour le récepteur de diffusion et le service d'intention - J'ai seulement posté la section des autorisations de mon manifeste. L'application client fonctionne parfaitement lorsque l'appareil n'est pas inactif. Je peux voir à partir du journal que même si inactif le message a été reçu - le seul problème est le fait que le message push entrant ne réveille pas l'appareil – Will777

+0

Donc en mode veille aussi vous obtenez message signifie sa méthode onMessage() appelant de service là-bas, vous pouvez écrire un code de sillage qui est dans ce post http://stackoverflow.com/questions/5215367/android-how-can-i-wake-up-the-phone-from-a-hard-sleep- to-take-a-picture – koti

+0

Merci, je vais essayer de le faire - J'étais juste sous l'impression que les bibliothèques client GCM vont réveiller le périphérique quand le message arrive – Will777

4

delayWhileIdle=false

delay_while_idle: S'il est inclus, indique que le message ne doit pas être envoyé immédiatement si le périphérique est inactif.
Le serveur attend que le périphérique devienne actif, puis seul le dernier message pour chaque valeur * collapse_key * est envoyé. Optionnel. La valeur par défaut est false et doit être un booléen JSON.

2

Le côté serveur a besoin de ce code; Cela signifie qu'il n'y a pas de réveil téléphonique en mode veille prolongée. mais reçu un message.

puis, lors du réveil du téléphone utilisateur, généré une nouvelle intention pour GCMIntentService.

Questions connexes