Android单挑通知未显示

时间:2017-07-19 18:34:30

标签: android notifications

我正在努力进行抬头通知工作。已创建通知,但它未显示在应用顶部。 以下是负责构建通知的代码:

Notification notification = new NotificationCompat.Builder(context)
                                .setSmallIcon(android.R.drawable.arrow_up_float)
                                .setContentTitle("Check running time - click!")
                                .setContentText(String.valueOf(elapsedTime))
                                .setContentIntent(pendingIntent)
                                .setDefaults(Notification.DEFAULT_ALL)
                                .setPriority(Notification.PRIORITY_HIGH)
                                .setVibrate(new long[0])
                                .build();

我正在尝试运行该应用程序的设备是API 21.我见过很多线程,但没有给出解决方案。

5 个答案:

答案 0 :(得分:3)

您需要做两件事:

  1. 确保正确配置了您的通知。参见:https://developer.android.com/guide/topics/ui/notifiers/notifications#Heads-up

  2. 并确保手机配置正确(我认为这是大多数卡住的地方)。

  

步骤1.配置通知。

像这样注册您的通知频道

token

然后,创建一个通知,如下所示:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        String name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_HIGH; //Important for heads-up notification
        NotificationChannel channel = new NotificationChannel("1", name, importance);
        channel.setDescription(description);
        channel.setShowBadge(true);
        channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }

最后,像平常一样发送通知,例如:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, "1")
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle(textTitle)
        .setContentText(textContent)
        .setDefaults(DEFAULT_SOUND | DEFAULT_VIBRATE) //Important for heads-up notification
        .setPriority(Notification.PRIORITY_MAX); //Important for heads-up notification
  

第2步。配置电话。

我注意到我必须在手机上启用一些其他设置(小米Note 3):

以下是一些进入菜单的方法:

  1. 在通知栏中长按通知。
  2. 转到:设置>已安装的应用程序>选择您的应用程序>通知
  3. 在上一步的基础上,您可以通过使用以下意图将用户发送到已安装的应用程序菜单来部分帮助用户:

startActivity(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS));

最后,当您进入此菜单时,启用一个称为“浮动通知”的设置(此设置的名称在设备之间有所不同)。

答案 1 :(得分:0)

尝试这样做:

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context)
                                .setSmallIcon(android.R.drawable.arrow_up_float)
                                .setContentTitle("Check running time - click!")
                                .setContentText(String.valueOf(elapsedTime))
                                .setContentIntent(pendingIntent)
                                .setDefaults(Notification.DEFAULT_ALL)
                                .setPriority(Notification.PRIORITY_HIGH)
                                .setVibrate(new long[0]);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());

答案 2 :(得分:0)


你的代码几乎没问题。我正在使用DEFAULT_VIBRATE而不是DEFAULT_ALL:

builder.setPriority(Notification.PRIORITY_HIGH);
if (Build.VERSION.SDK_INT >= 21) {
   mBuilder.setDefaults(Notification.DEFAULT_VIBRATE);
}

但是,您也可以设置

builder.fullScreenIntent(sameAsContentPendingtIntent);

但是^这个是非确定性的。我的意思是系统选择显示HeadsUp或启动Intent。在大多数情况下它会显示HeadUp,但由于Android版本,制造商,发射器等等,我不指望它。
最后,您还需要定义正确的通知通道。我认为你已经这样做了,因为你不会看到任何通知,如果你不这样做:-)哦可爱的Android :-)无论如何,我想说NotificationChannel也需要高度优先:

channel = new NotificationChannel("uniqueId", "name", NotificationManager.IMPORTANCE_HIGH);
channel.enableVibration(true);

此外,我建议您,在developer.android.com上查看最新意见 谷歌将从现在开始变得更加严格。不仅是通知而且是'targetApi',但这是另一个故事,原谅我:-)
今天有一个很好的代码

答案 3 :(得分:0)

我遇到了同样的问题。解决方案就是正确设置振动 builder.setVibration(NotificationCompat.DEFAULT_VIBRATE)

根据Google:

  

该通知具有高优先级,并在运行Android 7.1(API级别25)及更低版本的设备上使用铃声或振动

我希望这会有所帮助:)

答案 4 :(得分:-1)

只需使用

 NotificationManager mNotificationManager = (NotificationManager)
            this.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent myintent = new Intent(this, MainActivity.class);
    myintent.putExtra("message", msg);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            myintent, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.ic_launcher)
                    .setContentTitle("ttile")
                    .setStyle(new NotificationCompat.BigTextStyle()
                            .bigText(msg))
                    .setContentText(msg);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(1, mBuilder.build());