Подтвердить что ты не робот

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

Заранее благодарим за помощь

4b9b3361

Ответ 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.