2012-07-31 109 views
12

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

我有以下完成:

  1. 证实delay_while_idle未设置为true,在服务器应用程序
  2. 用于每个消息
  3. 重新启动了设备不同的崩溃键多次
  4. 试图完全从服务器端省略delay_while_idle - 它没有效果

I我的目标是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

问题only.Make确保以下是清单文件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

嗨koti,我有类似的广播接收器和意图服务的设置 - 我只发布我的清单的权限部分。当设备不闲置时,客户端应用程序可以正常工作。我可以从日志中看到,即使空闲时收到的消息 - 唯一的问题是传入的推送消息不会唤醒设备 – Will777 2012-07-31 09:08:58

+0

因此,在空闲模式下,您也收到消息意味着其调用onMessage()方法在那里你可以写一些唤醒代码在这篇文章http://stackoverflow.com/questions/5215367/android-how-can-i-wake-up-the-phone-from-a-hard-sleep-摄像头 – koti 2012-07-31 09:17:53

+0

谢谢,我将尽力做到这一点 - 我只是觉得GCM客户端库会在消息到达时唤醒设备 – Will777 2012-07-31 09:29:51

4

delayWhileIdle=false

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

2

服务器端需要此代码;

builder.delayWhileIdle(false); 

这意味着没有在深度睡眠唤醒手机。但收到消息。

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

相关问题