使用Parse.com和Android定制推送通知两次
我正在使用parse.com android进行自定义推送通知。Push已成功集成到我的应用程序中,但问题是我一次收到两个通知 一个来自带有图像的自定义接收器,另一个来自没有任何图像的操作系统的默认通知,该通知甚至没有从通知栏中删除,如果我要删除它,它会一次又一次地出现在通知托盘上。我也会在下面粘贴我的代码片段和图片使用Parse.com和Android定制推送通知两次,android,parse-platform,push-notification,notifications,Android,Parse Platform,Push Notification,Notifications,我正在使用parse.com android进行自定义推送通知。Push已成功集成到我的应用程序中,但问题是我一次收到两个通知 一个来自带有图像的自定义接收器,另一个来自没有任何图像的操作系统的默认通知,该通知甚至没有从通知栏中删除,如果我要删除它,它会一次又一次地出现在通知托盘上。我也会在下面粘贴我的代码片段和图片 // My Custom Receiver Class public class CustomPushReceiver extends ParsePushBroadcastRec
// My Custom Receiver Class
public class CustomPushReceiver extends ParsePushBroadcastReceiver {
private final String TAG = CustomPushReceiver.class.getSimpleName();
private NotificationUtils notificationUtils;
private Intent parseIntent;
public CustomPushReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
super.onPushReceive(context, intent);
if (intent == null)
return;
parseIntent = intent;
try {
String action = intent.getAction();
JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data"));
if (action.equalsIgnoreCase("com.parse.push.intent.RECEIVE")) {
// NOTIFICATION_ID++;
String title = "DW";
if (json.has("alert"))
{
String text = json.getString("alert");
generateNotification(context, title, json, text,parseIntent);
}
}
} catch (JSONException e) {
}
}
@Override
protected void onPushDismiss(Context context, Intent intent) {
super.onPushDismiss(context, intent);
}
@Override
protected void onPushOpen(Context context, Intent intent) {
super.onPushOpen(context, intent);
}
private void generateNotification(Context context, String title, JSONObject json, String text, Intent intent) {
// Intent intent = new Intent(context, home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
NotificationManager mNotifM = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
android.support.v4.app.NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.log_pic_small)
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.log_pic))
.setAutoCancel(true)
.setContentTitle(title)
.setContentText(text)
.setStyle(new NotificationCompat.BigTextStyle().bigText(text))
.setTicker(text)
.setLights(Color.GREEN, 500, 500);
mNotifM.cancel(0);
mBuilder.setContentIntent(contentIntent);
mNotifM.notify(110, mBuilder.build());
}
}
清单文件
<service android:name="com.parse.PushService" />
<receiver
android:name="com.restaurant.services.CustomPushReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<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.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 "info.androidhive.parsenotifications" to match your app's package name. -->
<category android:name="com.dw" />
</intent-filter>
</receiver>
我认为您的问题是由方法super.onPushReceive(上下文、意图)产生的
在您的公共void onReceive(上下文、意图)
中
我认为您应该重写protectedvoidonpushreceive(上下文,意图)
并在那里处理推送通知。
注意:如果覆盖了onPushReceive,则不要调用super,因为它将再次显示推送
根据解析文档:
在收到推送通知时调用。默认情况下,广播
如果数据中存在“操作”且
如果“警报”和“标题”出现在列表中,将显示通知
数据
编辑
公共类CustomPushReceiver扩展了ParsePushBroadcastReceiver{
…这里是您示例中的初始化代码
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(Context context, Intent intent);
}
@Override
public void onPushReceive(Context context, Intent intent) {
//NO SUPER CALL
....exact code from your onReceive.....
}
... rest of the code from your example...
}
我想您可以从这里开始处理。不要每次都生成通知,而每次初始化都是在应用程序启动时进行的
CustomPushReceiver CustomReceiver=新的CustomPushReceiver(getApplicationContext())
//将此接收器设置为推送工厂
getPushManager().setNotificationFactory(CustomReceiver) 检查是否在清单文件中添加了两个接收方,一个用于默认解析接收方,另一个用于自定义接收方。如果是这样,请删除解析默认接收器并仅保留您的接收器。
确保服务器是否发送两次通知。服务器仅发送一次推送@穆罕默德·巴巴蒂斯感谢你的回答。你能在这里放一个小的代码片段,这样我就可以很容易地理解它了。我现在有点不明白。非常感谢。它解决了我的问题。你是对的,我给super打电话叫onPushReceive是个错误,它一次又一次地打电话。这就是为什么另一个通知也会出现的原因。@danypata。你能帮助我吗?Please@jojo我能为你做些什么?这个答案非常古老:)@danypata。我有一个这样的问题。非常感谢: