Android如何在屏幕上显示通知

问题描述 投票:26回答:5

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

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

码:

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);
android notifications lockscreen
5个回答
5
投票

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


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/


3
投票

使用NotificationCompat.Builder创建通知,但确保将可见性提供给public

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

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);

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


1
投票

我通过将此行添加到通知构建器来修复此问题

builder.setOngoing(true);

它还会使用户无法取消通知,但它可以解决问题。

致积于:MarianKlühspies(link

© www.soinside.com 2019 - 2024. All rights reserved.