Broadcast receiver push notification

haythem souissi picture haythem souissi · Jul 6, 2013 · Viewed 13.3k times · Source

I have implemented push notification in my android application:

In my main class:

// PUSH
Parse.initialize(this, applicationId, clientKey); 
PushService.setDefaultPushCallback(this, SlidingMenuActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
ParseAnalytics.trackAppOpened(getIntent());

In my manifest.xml:

<!-- PUSH -->
<service android:name="com.parse.PushService" />

<receiver android:name="com.parse.ParseBroadcastReceiver" >
    <intent-filter>
          <action android:name="android.intent.action.BOOT_COMPLETED" />
          <action android:name="android.intent.action.USER_PRESENT" />
    </intent-filter>
</receiver>

When i open my application, i am receiving notification. I click on back and close the application. I still receiving notification for approximatively 1 hours. After one hour, i send three notification and no notification appear. So i restart my app, and three notification notification appear.

I guess my broadcast receiver has been recreated. Why my android is killing my notification broadcast receiver?

How can i fix that?

Answer

aljuaid86 picture aljuaid86 · Jul 6, 2013

try my solution it worked for me: link your broadcast receiver to your service by adding

public void onReceive(Context context, Intent intent) {
    //add the following
    Intent e = new Intent(context, urservice.class);
    context.startService(e);
}

then register your receiver in your service onCreate() like so

@Override
public void onCreate() {
    super.onCreate();
    IntentFilter filter = new IntentFilter(Intent.BOOT_COMPLETED);
    filter.addAction(Intent.USER_PRESENT);
    BroadcastReceiver mReceiver = new ParseBroadcastReceiver();
    registerReceiver(mReceiver, filter);
}

then just delete your 'broadcastreceiver' from the manifest, lastly surly you want the service to live as long as possible,,, well then you need also 2 codes for the service in your int onStartCommand(Intent intent, int flags, int startId) make sure you put the following

mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    Intent bIntent = new Intent(urservice.this, urmain.class);       
    PendingIntent pbIntent = PendingIntent.getActivity(urservice.this, 0 , bIntent, 0);

    NotificationCompat.Builder bBuilder =
            new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle("title")
                .setContentText("sub title")
                .setAutoCancel(true)
                .setOngoing(true)
                .setContentIntent(pbIntent);
    barNotif = bBuilder.build();
    this.startForeground(1, barNotif);
// also the following code is important 
return Service.START_STICKY;

now make return sticky at the end of your onstartcommand. feel free to ask me.

hope I helped,,, good luck. :)