Am using parse notification in my app. Am receiving notification alert using GcmBroadcastReceiver. But am seeing lot of notification receiving to my app. I thought to update notification in status bar so i used custom receiver. When receiving notification through GcmBroadcastReceiver, my custom broadcastreceiver called. So in my status bar having both gcm and custom notifications. I want custom notification only. How to solve this problem?
Manifest code:
<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>
<receiver
android:name="com.parse.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" />
<!-- IMPORTANT: Change "com.parse.tutorials.pushnotifications" to match your app's package name. -->
<category android:name="com.packagename" />
</intent-filter>
</receiver>
<receiver
android:name="com.parse.ParsePushBroadcastReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.parse.push.intent.RECEIVE" />
<action android:name="com.parse.push.intent.DELETE" />
<action android:name="com.parse.push.intent.OPEN" />
</intent-filter>
</receiver>
<receiver
android:name="com.packagename.IncomingReceiver"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="com.packagename.UPDATE_STATUS" />
</intent-filter>
</receiver>
Application class:
Parse.initialize(this, "app id", "client id");
Incomingreceiver class:
public class IncomingReceiver extends BroadcastReceiver {
private static final int NOTIFICATION_ID = 1;
public static int numMessages = 0;
@Override
public void onReceive(Context context, Intent intent) {
try {
String action = intent.getAction();
JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data"));
if (action.equalsIgnoreCase("com.packagename.UPDATE_STATUS")) {
String title = "appname";
if (json.has("header"))
title = json.getString("header");
generateNotification(context, title, json,contenttext);
}
} catch (JSONException e) {
Log.d("jsonexc", "JSONException: " + e.getMessage());
}
}
private void generateNotification(Context context, String title, JSONObject json, String contenttext) {
Intent intent = new Intent(context, NewActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0);
NotificationManager mNotifM = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.app_icon).setContentTitle(title).setContentText("contenttext").setNumber(++numMessages);
mBuilder.setContentIntent(contentIntent);
mNotifM.notify(NOTIFICATION_ID, mBuilder.build());
}
}
Replace it
<receiver
android:name="com.parse.ParsePushBroadcastReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.parse.push.intent.RECEIVE" />
<action android:name="com.parse.push.intent.DELETE" />
<action android:name="com.parse.push.intent.OPEN" />
</intent-filter>
</receiver>
to your:
<receiver
android:name=".MyReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.parse.push.intent.RECEIVE" />
<action android:name="com.parse.push.intent.DELETE" />
<action android:name="com.parse.push.intent.OPEN" />
</intent-filter>
</receiver>
and create class:
public class MyReceiver extends ParsePushBroadcastReceiver {
protected void onPushReceive(Context mContext, Intent intent) {
//enter your custom here generateNotification();
}
}
Just remove super.onPushReceive(context, intent); from your custom receiver to receive a single custom notification.
I simply added my custom PushReceiver with same package name as ParsePushReceiver
package com.parse;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Build;
import android.os.Bundle;
import com.squareup.otto.EventBus;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Locale;
import java.util.Random;
public class ParsePushReceiver extends ParsePushBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
byte var5 = -1;
switch (intentAction.hashCode()) {
case -824874927:
if (intentAction.equals("com.parse.push.intent.DELETE")) {
var5 = 1;
}
break;
case -269490979:
if (intentAction.equals("com.parse.push.intent.RECEIVE")) {
var5 = 0;
}
break;
case 374898288:
if (intentAction.equals("com.parse.push.intent.OPEN")) {
var5 = 2;
}
}
switch (var5) {
case 0:
onPushReceive(context, intent);
break;
case 1:
super.onPushDismiss(context, intent);
break;
case 2:
super.onPushOpen(context, intent);
}
}
@Override
protected void onPushReceive(Context context, Intent intent) {
try {
JSONObject pushData = new JSONObject(intent.getStringExtra("com.parse.Data"));
String action;
action = pushData.optString("action", null);
if (action != null) {
Bundle notification = intent.getExtras();
Intent broadcastIntent = new Intent();
broadcastIntent.putExtras(notification);
broadcastIntent.setAction(action);
broadcastIntent.setPackage(context.getPackageName());
context.sendBroadcast(broadcastIntent);
}
if (pushData.has(Push.PUSH_TYPE)) {
String type = pushData.getString(Push.PUSH_TYPE);
switch (PushType.fromString(type)) {
case chat:
case booked:
case rate:
case unknown:
break;
}
} else {
sendGlobalNoti(context, intent, null);
}
} catch (JSONException var7) {
PLog.e("ParsePushReceiver", "Unexpected JSONException when receiving push data: ", var7);
}
}
private void sendChattingNoti(Context context, Intent intent, PushType pushType) {
JSONObject pushData = this.getPushData(intent);
if (((User) ParseUser.getCurrentUser()).getChattingNotiEnabled()
&& pushData != null
&& pushData.has("title")) {
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
android.support.v4.app.NotificationCompat.Builder builder = new android.support.v4.app.NotificationCompat.Builder(context);
String title = pushData.optString("title", context.getString(R.string.app_name));
String message = pushData.optString("alert", "Notification received.");
switch (pushType) {
case booked:
message = context.getString(R.string.lesson_booked_message);
break;
case lessonConfirmed:
message = context.getString(R.string.lesson_confirmed);
break;
case lessonCanceled:
message = context.getString(R.string.lesson_canceled);
break;
}
builder.setContentTitle(title);
builder.setContentText(message);
builder.setTicker(title + ": " + message);
builder.setAutoCancel(true);
builder.setOnlyAlertOnce(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_notification));
builder.setSmallIcon(R.drawable.ic_notification);
Intent chatIntent = new Intent(Keys.IntentKeys.ACTION_SHOW_CHAT);
chatIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
chatIntent.addCategory(Intent.CATEGORY_DEFAULT);
String chatId = pushData.optString(Push.PUSH_CHAT_ID, null);
if (chatId != null)
chatIntent.putExtra(Keys.EXTRA_CHAT_ID, chatId);
PendingIntent pending = PendingIntent.getActivity(context, 0, chatIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pending);
Notification noti = builder.build();
noti.defaults |= Notification.DEFAULT_VIBRATE;
noti.defaults |= Notification.DEFAULT_SOUND;
noti.defaults |= Notification.DEFAULT_LIGHTS;
nm.notify(pushType.ordinal(), noti);
}
}
private void sendGlobalNoti(Context context, Intent intent, String defaultAlert) {
// Global Notification
if (((User) ParseUser.getCurrentUser()).getGlobalNotiEnabled()) {
Notification notification = getNotification(context, intent, defaultAlert);
if (notification != null)
ParseNotificationManager.getInstance().showNotification(context, notification);
}
}
protected Notification getNotification(Context context, Intent intent, String defaultAlert) {
JSONObject pushData = this.getPushData(intent);
if (pushData != null && (pushData.has("alert") || pushData.has("title"))) {
String title = pushData.optString("title", ManifestInfo.getDisplayName(context));
String alert = pushData.optString("alert", defaultAlert == null ? "Notification received." : defaultAlert);
String tickerText = String.format(Locale.getDefault(), "%s: %s", new Object[]{title, alert});
Bundle extras = intent.getExtras();
Random random = new Random();
int contentIntentRequestCode = random.nextInt();
int deleteIntentRequestCode = random.nextInt();
String packageName = context.getPackageName();
Intent contentIntent = new Intent("com.parse.push.intent.OPEN");
contentIntent.putExtras(extras);
contentIntent.setPackage(packageName);
Intent deleteIntent = new Intent("com.parse.push.intent.DELETE");
deleteIntent.putExtras(extras);
deleteIntent.setPackage(packageName);
PendingIntent pContentIntent = PendingIntent.getBroadcast(context, contentIntentRequestCode, contentIntent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent pDeleteIntent = PendingIntent.getBroadcast(context, deleteIntentRequestCode, deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder parseBuilder = new NotificationCompat.Builder(context);
parseBuilder.setContentTitle(title).setContentText(alert).setTicker(tickerText).setSmallIcon(this.getSmallIconId(context, intent)).setLargeIcon(this.getLargeIcon(context, intent)).setContentIntent(pContentIntent).setDeleteIntent(pDeleteIntent).setAutoCancel(true).setDefaults(-1);
if (alert != null && alert.length() > 38) {
parseBuilder.setStyle((new NotificationCompat.Builder.BigTextStyle()).bigText(alert));
}
return parseBuilder.build();
} else {
return null;
}
}
private JSONObject getPushData(Intent intent) {
try {
return new JSONObject(intent.getStringExtra("com.parse.Data"));
} catch (JSONException var3) {
PLog.e("ParsePushReceiver", "Unexpected JSONException when receiving push data: ", var3);
return null;
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With