GCM没有唤醒设备

时间:2012-07-31 08:28:57

标签: java android google-cloud-messaging

我开发了一个GCM应用程序。当设备没有空闲时(即通过按下电源按钮睡觉),一切正常。但是,当我在设备空闲时发送消息时,设备不会唤醒。

我做了以下事情:

  1. 已验证服务器应用程序中的delay_while_idle未设置为true
  2. 为每封邮件使用不同的折叠键
  3. 多次重启设备
  4. 尝试完全从服务器端省略delay_while_idle - 它没有效果
  5. 我的目标是Android 2.2 api 8级(最低版本),在运行Android 2.3.6的实际设备上进行测试

    设备正在使用wi-fi,没有SIM卡 - 但是在运行时接收消息并且没有空闲。

    这是客户端清单权限部分:

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

    提前感谢您提供任何帮助

3 个答案:

答案 0 :(得分:4)

仅限清单文件中的问题。请确保以下是清单文件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>

答案 1 :(得分:4)

delayWhileIdle=false

delay_while_idle:如果包含,则表示如果设备空闲,则不应立即发送消息 服务器将等待设备变为活动状态,然后仅发送每个* collapse_key *值的最后一条消息。可选的。默认值为false,且必须为JSON布尔值。

答案 2 :(得分:2)

服务器端需要此代码;

    builder.delayWhileIdle(false);

这意味着深度睡眠时没有唤醒电话。但收到了消息。

然后在唤醒用户电话时,为GCMIntentService生成新的意图。