我开发了一个GCM应用程序。当设备没有空闲时(即通过按下电源按钮睡觉),一切正常。但是,当我在设备空闲时发送消息时,设备不会唤醒。
我做了以下事情:
我的目标是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" />
提前感谢您提供任何帮助
答案 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生成新的意图。