Recibir notificación de análisis mediante el receptor de difusión personalizado

Estoy utilizando la notificación de análisis en mi aplicación. Estoy recibiendo una alerta de notificación usando GcmBroadcastReceiver. Pero estoy viendo mucha notificación de recibir a mi aplicación. Pensé en actualizar la notificación en la barra de estado por lo que utilizó receptor personalizado. Al recibir la notificación a través de GcmBroadcastReceiver, mi broadcastreceiver personalizado llamó. Así que en mi barra de estado que tiene tanto gcm y notificaciones personalizadas. Quiero notificación personalizada solamente. ¿Cómo resolver este problema?

Código manifiesto:

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

Clase de aplicación :

 Parse.initialize(this, "app id", "client id"); 

Incomingreceiver clase:

  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()); } } 

Reemplázalo

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

para usted:

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

Y crear la clase:

 public class MyReceiver extends ParsePushBroadcastReceiver { protected void onPushReceive(Context mContext, Intent intent) { //enter your custom here generateNotification(); } } 

Sólo eliminar super.onPushReceive (contexto, intención); Desde su receptor personalizado para recibir una sola notificación personalizada.

Simplemente agregé mi PushReceiver personalizado con el mismo nombre de paquete que 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; } } } 

En el archivo de manifiesto que está utilizando

Com.parse.GcmBroadcastReceiver

En lugar de utilizar su broadcastreciver personalizado, en su caso simple cambio > com.parse.GcmBroadcastReceiver a com.yourpackagename. IncomingReceiver com.yourpackagename. IncomingReceiver

No probar BroadcastReceiver en simulador no funcionará así que probarlo en un verdadero Android

Vea este repo que utiliza un broadcastreciver personalizado para la notificación push de parse https://github.com/srini-hashinc/IIYO

  • ClassNotFoundException con Parse y Facebook
  • Abra la actividad haciendo clic en la notificación push de Parse
  • Cómo obtener la lista de usuarios en el análisis mediante la aplicación de Android
  • Cómo recuperar datos de varias tablas / clases de Parse.com
  • Cómo grabar push open desde la notificación de Parse Push
  • A condición de que la dependencia de grado sea AAR no JAR
  • Recuperar ID de Facebook de authdata en Parse - Android
  • Hace ParseImageView cache ParseFile
  • Integración de Facebook en aplicaciones móviles multiplataforma
  • No se puede resolver com.parse.ParseQueryAdapter
  • KnoxVpnUidStorageknoxVpnSupported Valor de API devuelto es error falso al usar Parse api
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.