API 17 - Android通知启动活动而不点击

时间:2016-02-25 11:58:56

标签: android notifications

我在API 17上发布了一个通知,并且在没有点击通知的情况下触发了待处理的意图。

以下是我在发布通知时使用的代码,代码的哪一部分触发此行为以及如何解决?

 public static void notifyIncomingMessage(Context context, ChatMessage message, String name) throws JSONException {
        NotificationManager mNotificationManager = (NotificationManager)
                context.getSystemService(Context.NOTIFICATION_SERVICE);

        Intent intent = new Intent(context, ChatMessageInterceptor.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        PendingIntent contentIntent = PendingIntent.getActivity(context, GcmIntentService.NOTIFICATION_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        String text = messageText(message, context);

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_small_notification)
                        .setContentTitle(name == null ? context.getString(R.string.app_name) : name)
                        .setStyle(new NotificationCompat.BigTextStyle()
                                .bigText(text))
                        .setContentText(text)
                        .setLargeIcon(getBitmapIcon(context))
                        .setContentIntent(contentIntent)
                        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                        .setAutoCancel(true)
                        .setFullScreenIntent(contentIntent, true);
        mNotificationManager.notify(GcmIntentService.NOTIFICATION_ID, mBuilder.build());
    }

2 个答案:

答案 0 :(得分:1)

主要原因是由于setFullScreenIntent()方法,因为android的文件告诉[developer.android.com] [1] 所以不要使用

    mBuilder.setFullScreenIntent(contentIntent, true);

而只是使用

    mBuilder.setPriority(Notification.PRIORITY_HIGH)
    .setDefaults(Notification.DEFAULT_ALL);

这有助于默认显示抬头通知。 即使对于setDefaults(),Notification.DEFAULT_ALL也没有必要,但很好用。

这很清楚,对我有用。

答案 1 :(得分:0)

显然它一定是fullScreenIntent。我删除了它,只添加了API> = 19.我还是要在KitKat设备上测试。

if (Utils.hasLollipop())
    mBuilder.setFullScreenIntent(contentIntent, true);

没有注意文档,但这里是。

  

启动的意图,而不是将通知发布到状态   酒吧。仅适用于要求极高优先级的通知   用户的即时关注,例如来电或   用户已明确设置为特定时间的闹钟。如果   这个设施用于其他东西,请给用户一个   选项将其关闭并使用正常通知,因为这可以   非常具有破坏性。

     

在某些平台上,系统UI可能会选择显示单挑   通知,而不是在用户的情况下启动此意图   使用该设备。

我实际上只想要抬头通知,但是如何检测到拥有它或者没有它的设备完全是另一个问题。