Android如何在屏幕上显示通知

时间:2011-09-16 09:30:31

标签: android notifications lockscreen

我一直致力于推送通知,我能够实现它并在状态栏上显示它,我面临的问题是我想显示它即使手机是锁定的,在锁定屏幕下它说(“拖动解锁”),我已经看过这样的通知但是找不到任何例子。

示例: 就像您收到未接来电一样,它会在屏幕上的锁定按钮下显示。

代码:

String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
int icon = R.drawable.icon_launcher;
CharSequence tickerText = "MyApplication";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE|Notification.DEFAULT_LIGHTS;;
CharSequence contentTitle = this.title;
CharSequence contentText = this.message;
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
mNotificationManager.notify(NOTICE_ID, notification);

5 个答案:

答案 0 :(得分:15)

使用NotificationCompat.Builder创建通知

NotificationCompat.Builder mBuilder =   new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher) // notification icon
            .setContentTitle("Notification!") // title for notification
            .setContentText("Hello word") // message for notification
            .setAutoCancel(true); // clear notification after click
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,0,intent,Intent.FLAG_ACTIVITY_NEW_TASK);
mBuilder.setContentIntent(pi);
NotificationManager mNotificationManager =
                    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, mBuilder.build());

在锁定屏幕上推送通知 http://www.hongkiat.com/blog/android-lock-screen-notifications/

答案 1 :(得分:5)

您是否尝试使用标记创建alertdialog? flag_show_when_locked应该可以解决问题。 请参考这个主题,你应该在这里找到更详细的答案。 Android Lock Screen Widget

答案 2 :(得分:3)

使用NotificationCompat.Builder创建通知,但请确保将可见性置于公共状态,如

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder
        .setContentTitle("Title")
        .setContentText("content")
        .setSmallIcon(R.mipmap.ic_launcher)
        .setVisibility(NotificationCompat.VISIBILITY_PUBLIC);//to show content in lock screen

答案 3 :(得分:2)

您看到的通知实际上可能是放置在自定义小部件主机锁屏上的小部件。

如果你在4.4.3这里看一下InstallWidgetReceiver的android平台源代码:

https://android.googlesource.com/platform/packages/apps/Launcher3/+/master/src/com/android/launcher3/InstallWidgetReceiver.java

您将看到作者的这一说明:

  

/ **    *我们可能会在以后对此进行充实,以处理允许外部应用程序放置小部件,但就目前而言,    *我们只想揭露其他地方的行动。    * /

你可以看到,InstallWidgetReceiver.java实际上并没有像InstallShortCutReceiver.java那样被谷歌充实。因此,至少高达4.4.3,您无法将小部件添加到本机锁定屏幕,就像您可以使用InstallShortCutReceiver向主屏幕添加快捷方式一样。

除非您将自己的锁屏应用程序构建为窗口小部件主机,并且用户安装代替本机,否则使用窗口小部件可能会运气不佳。

另一种方法是给我们一个设置getWindow()的活动.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

无论屏幕是否锁定,都会显示您的活动。屏幕锁定时取消此活动将显示锁定的屏幕。

答案 4 :(得分:0)

我通过将此行添加到通知生成器中来解决了此问题

builder.setOngoing(true);

它也将使通知无法被用户取消,但它解决了问题。

信用:MarianKlühspies(link