GCM не пробуждает устройство
Я разрабатываю приложение GCM. Все работает нормально, когда устройство не работает (например, спящий режим, нажав кнопку питания). Однако, когда я отправляю сообщение, когда устройство находится в режиме ожидания, устройство не просыпается.
Я сделал следующее:
- Проверено, что delay_while_idle не установлено в true в серверном приложении
- Используется другой ключ коллапса для каждого сообщения
- Перезагрузите устройство несколько раз.
- Пробовал полностью исключить delay_while_idle со стороны сервера - он не имеет эффекта
Я нацелен на Android 2.2 api level 8 (самая низкая версия), тестирование на реальном устройстве под управлением Android 2.3.6
Устройство использует wi-fi, нет сим-карты - но получает сообщения в режиме ожидания, а не в режиме ожидания.
Это раздел разрешения клиента:
<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" />
Заранее благодарим за помощь
Ответы
Ответ 1
в файле манифеста. Убедитесь, что следующее содержимое файла манифеста 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>
Ответ 2
delayWhileIdle=false
delay_while_idle: если включено, указывает, что сообщение не следует отправлять немедленно, если устройство находится в режиме ожидания.
Сервер будет ждать, пока устройство станет активным, и будет отправлено только последнее сообщение для каждого значения * collapse_key *. Необязательный. Значение по умолчанию - false и должно быть JSON
boolean.
Ответ 3
стороне сервера нужен этот код;
builder.delayWhileIdle(false);
Это означает, что не просыпаться телефон в глубоком сне. но получил сообщение.
то при пробуждении телефона пользователя генерируется новое намерение для GCMIntentService.