显示收到的推送通知

Posted

技术标签:

【中文标题】显示收到的推送通知【英文标题】:Displaying Received Push Notifications 【发布时间】:2014-10-27 19:10:04 【问题描述】:

根据Google Developers Guide,我正在实施this 代码。

一切正常,我可以成功收到通知数据。

如果您检查 GCMIntentService.java 文件的第 70 行,它会将此行回显到 LogCat:

 I/GCM Demo(6653): Working... 1/5 @ 8656981
 I/GCM Demo(6653): Working... 2/5 @ 8657982
 I/GCM Demo(6653): Working... 3/5 @ 8658983
 I/GCM Demo(6653): Working... 4/5 @ 8659983
 I/GCM Demo(6653): Working... 5/5 @ 8660984
 I/GCM Demo(6653): Completed work @ 8661985
 I/GCM Demo(6653): Received: Bundle[msg=messagehere, from=SENDERIDHERE, android.support.content.wakelockid=3, collapse_key=do_not_collapse]

所以我的设备正在接收通知数据,但设备的状态栏中没有可见的通知。什么都没有发生。

你能告诉我为什么这些推送通知没有显示在我的设备上,只显示在 LogCat 中吗?

更新

    Manifest file

    这是我的 sendNotification() 方法:

    private void sendNotification(String msg) 
        mNotificationManager = (NotificationManager)
            this.getSystemService(Context.NOTIFICATION_SERVICE);
    
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            new Intent(this, MainActivity.class), 0);
    
        NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
        .setContentTitle("GCM Notification")
        .setStyle(new NotificationCompat.BigTextStyle()
        .bigText(msg))
        .setContentText(msg);
    
         mBuilder.setContentIntent(contentIntent);
        mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    
    

【问题讨论】:

将您的代码发布到您正在创建通知的位置(sendNotification 在您链接的代码中)。 尝试在第 106 行使用 (int) (System.currentTimeMillis() & 0xfffffff); 代替 NOTIFICATION_ID。只是一个疯狂的猜测。还可以尝试在清单文件中使用 Intent 服务类的完整路径。 @ianhanniballake 已发布。谢谢。 @Rohit5k2 ,试过了。没有任何改变。 您是否尝试使用GCMIntentService.java 的完整路径? 【参考方案1】:

你能试试这个方法吗……这个方法对我有用。虽然和你的差不多……

private void sendNotification(String msg)

    int uniqueId = (int) (System.currentTimeMillis() & 0xfffffff);
    mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
            | Intent.FLAG_ACTIVITY_SINGLE_TOP
            | Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent contentIntent = PendingIntent.getActivity(this, uniqueId,
            intent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle("Hello")
            .setStyle(new NotificationCompat.BigTextStyle().bigText("Hello"))
            .setContentText("This is your notification content")
            .setAutoCancel(true)
    mBuilder.setContentIntent(contentIntent);

    mNotificationManager.notify(uniqueId, mBuilder.build());

叫醒电话是完全不同的事情。您可以通过以下方式使用 WakeLock:

当您设置通知时:

WakeLock screenOn = ((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "test");
screenOn.acquire();

是的,当您不再需要唤醒锁时,不要忘记释放唤醒锁(可能在 5 秒后或点击通知;根据您的需要):

screenOn.release();

【讨论】:

不同之处在于添加标志。默认示例有点旧,尚未更新。如果它解决了你的问题,你能接受这个作为你的答案吗? :D 为什么手机锁不唤醒? (当然我会接受,但在此之前我有一些问题:))【参考方案2】:

看起来(在您的 android 清单文件中)该服务可能尚未启用

请尝试将<service android:name=".GcmIntentService" /> 替换为:

<service android:enabled="true" android:name=".GcmIntentService" />

【讨论】:

android:enabled="true" 不是简单通知所必需的。没有它也很好。 没有?有趣的。我正在使用 API 19,但在清单中未包含 enabled 时遇到了问题。 原因一定是别的。没有它也可以工作...... :)

以上是关于显示收到的推送通知的主要内容,如果未能解决你的问题,请参考以下文章

处理远程推送通知格式

打开 PWA 时收到推送事件时不显示通知

显示收到的推送通知

收到推送通知时不显示横幅仅振动设备

保存收到的远程推送通知 - ios

应用程序可以决定在收到推送通知时根据用户字典显示警报吗?