Push Notification in Standby Modus

  • Antworten:2
  • Bentwortet
Phil
  • Forum-Beiträge: 40

02.09.2013, 10:44:28 via Website

Hallo,
ich habe eine App geschrieben welche Push Notifications erhalten kann. Wenn ich das Smartphone eingeschaltet habe und die App im Vorder oder Hintergrund läuft kommen die Push Notifications an.

Schalte ich aber das Display aus und das Smartphone geht in den Sleep Modus, dann erhalte ich keine Benachrichtungen mehr. Schicke ich von einem anderen Smartphone eine Wahtsapp Nachricht, wird diese empfangen. Die Internetverbindung, in diesem fall WLAN muss also noch eingeschaltet sein. Auch die Systemeinstellung, dass das WLAN im Standby aktiv bleiben soll, steht auf "immer".

Hier ein paar Quelltext auszüge:
Push registrieren
1public void onCreate(Bundle savedInstanceState) {
2 super.onCreate(savedInstanceState);
3 setContentView(R.layout.main);
4 GCMRegistrar.checkDevice(this);
5 GCMRegistrar.checkManifest(this);
6 register_push();
7}
8
9private void register_push() {
10 global.PUSH_TOKEN = GCMRegistrar.getRegistrationId(i_this);
11 if (global.PUSH_TOKEN.equals("")) {
12 GCMRegistrar.register(this, CONST.GOOGLE_PROJECT_ID);
13 } else {
14 global.register_device_at_my_server();
15 }
16}
manifest.xml
1<uses-permission android:name="android.permission.INTERNET" />
2 <uses-permission android:name="android.permission.WAKE_LOCK" />
3 <uses-permission android:name="android.permission.VIBRATE"/>
4 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
5 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
6 <!-- App receives GCM messages. -->
7 <permission android:name="de.ich.meine.app.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
8 <uses-permission android:name="de.ich.meine.app.permission.C2D_MESSAGE" />
9 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
10
11 <!-- GCM requires a Google account. -->
12 <uses-permission android:name="android.permission.GET_ACCOUNTS" />
13<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
14 <intent-filter>
15 <action android:name="com.google.android.c2dm.intent.RECEIVE" />
16 <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
17 <category android:name="de.ich.meine.app" />
18 </intent-filter>
19 </receiver>
20 <service android:name=".GCMIntentService" />
GCMIntentService.java
1public class GCMIntentService extends GCMBaseIntentService {
2 public GCMIntentService() {
3 super(CONST.GOOGLE_PROJECT_ID);
4 }
5protected void onMessage(Context context, Intent intent) {
6 log.i(CONST.TAG,"new push");
7 }
8// ...
9}

Habe ich beim initialisieren oder in der Manifest etwas falsch gemacht oder vergessen?

Ich bin für jede Hilfe dankbar :)

Phil

Antworten
impjor
  • Forum-Beiträge: 1.793

02.09.2013, 13:21:17 via Website

Na, der Sinn vom Stand-By ist es ja, dass das Phone nicht mehr so stark am Akku nuckelt. Deswegen werden weite Teile des OS "lahm gelegt". So auch dein Service. Um das zu umgehen kannst du einen WakeLock erstellen.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Phil
  • Forum-Beiträge: 40

02.09.2013, 13:38:18 via Website

Hallo,
ich habe rausgefunden woran es lag:
Ich habe beim senden des Pushes an den Google Server delay_while_idle mit übergeben. Dann ist natürlich klar warum der Push nicht ankommt, wenn das Gerät im Standby ist.

Zusätzlich habe ich noch ein WakeLock mit eingebaut, sodass das Gerät angeht, wenn eine Push Notification kommt.
1protected void onMessage(Context context, Intent intent) {
2 WakeLocker.acquire(getApplicationContext());
3 global.new_notification(context, intent);
4 WakeLocker.release();
5 }

Danke für den Hinweis :)

Phil

Mac Systems

Antworten