12

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

我做了以下事情:

  1. 已验证在服务器应用程序中 delay_while_idle 未设置为 true
  2. 为每条消息使用不同的折叠键
  3. 多次重启设备
  4. 尝试从服务器端完全省略 delay_while_idle - 它没有效果

我的目标是 Android 2.2 api level 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" /> 

提前感谢您的帮助

4

3 回答 3

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>
于 2012-07-31T09:02:41.850 回答
4

delayWhileIdle=false

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

于 2013-03-04T06:23:13.200 回答
2

服务器端需要这段代码;

    builder.delayWhileIdle(false);

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

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

于 2013-07-12T09:01:39.093 回答