简体   繁体   中英

GCM not waking up device

I developing a GCM application. Everything works fine when the device is not idle (ie sleeping by pressing the power button). However, when I send the message when the device is idle the device does not wake up.

I have done the following:

  1. Verified that delay_while_idle is not set to true in the server app
  2. Used a different collapse key for each message
  3. Rebooted the device multiple times
  4. Tried omitting the delay_while_idle completely from the server side - it has no effect

I am targetting Android 2.2 api level 8 (lowest version), testing on an actual device running Android 2.3.6

Device is using wi-fi, there is no sim card - but receives messages fine while running and not idle.

This is the client manifest permission section:

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

Thanks in advance for any help

problem within manifest file only.Make sure the following are the contents of manifest file 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>

delayWhileIdle=false

delay_while_idle : If included, indicates that the message should not be sent immediately if the device is idle.
The server will wait for the device to become active, and then only the last message for each *collapse_key* value will be sent. Optional. The default value is false, and must be a JSON boolean.

Server side need this code;

    builder.delayWhileIdle(false);

it's mean that no wake up phone on deep sleep. but received message.

then when wake up user phone, generated new intent for GCMIntentService.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM