2012-07-31 21 views
12

Estoy desarrollando una aplicación GCM. Todo funciona bien cuando el dispositivo no está inactivo (es decir, durmiendo presionando el botón de encendido). Sin embargo, cuando envío el mensaje cuando el dispositivo está inactivo, el dispositivo no se activa.GCM no se está despertando dispositivo

he hecho las siguientes:

  1. verificado que delay_while_idle no se establece en true en la aplicación del servidor
  2. utilizado una clave para ocultar diferente para cada mensaje
  3. reinicia el dispositivo varias veces
  4. Intentó omitir el delay_while_idle completamente del lado del servidor - no tiene efecto

I apuntar a Android 2.2 api nivel 8 (versión más baja), probando en un dispositivo real con Android 2.3.6

El dispositivo está utilizando wi-fi, no hay tarjeta SIM, pero recibe mensajes finos mientras se ejecuta y no está inactivo.

Esta es la sección permiso manifiesta cliente:

<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" /> 

Gracias de antemano por cualquier ayuda

Respuesta

4

problema dentro de archivo de manifiesto only.Make de que los siguientes son los contenidos del archivo de manifiesto GCM

<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

Hola koti, tengo la configuración similar para el receptor de difusión y el servicio de intención: solo publiqué la sección de permisos de mi manifiesto. La aplicación cliente funciona perfectamente cuando el dispositivo no está inactivo. Puedo ver en el registro que incluso cuando está inactivo el mensaje fue recibido, el único problema es el hecho de que el mensaje push entrante no despierta el dispositivo – Will777

+0

Entonces en modo inactivo también está recibiendo un mensaje significa que está llamando al método onMessage() de servicio allí puede escribir algún código de activación que se encuentra en esta publicación http://stackoverflow.com/questions/5215367/android-how-can-i-wake-up-the-phone-from-a-hard-sleep- to-take-a-picture – koti

+0

Gracias, voy a intentar hacer eso. Tenía la impresión de que las bibliotecas del cliente de GCM reactivarían el dispositivo cuando llegue el mensaje. – Will777

4

delayWhileIdle=false

delay_while_idle: si está incluido, indica que el mensaje no se debe enviar inmediatamente si el dispositivo está inactivo.
El servidor esperará a que el dispositivo se active, y solo se enviará el último mensaje para cada * valor de * collapse_key *. Opcional. El valor predeterminado es falso, y debe ser un booleano JSON.

2

El lado del servidor necesita este código;

builder.delayWhileIdle(false); 

significa que no hay teléfono despertador en el sueño profundo. pero recibió un mensaje.

luego, cuando se despierta el teléfono del usuario, se genera una nueva intención para GCMIntentService.

Cuestiones relacionadas