36

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

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

代码:

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

5 回答 5

22

使用 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/

于 2013-03-14T11:53:10.460 回答
6

使用 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
于 2016-12-10T23:04:08.140 回答
5

您是否尝试过使用标志创建警报对话框?flag_show_when_locked 应该可以解决问题。请参考这个帖子,你应该在这里找到更详细的答案。 Android 锁屏小工具

于 2012-06-13T15:05:37.840 回答
3

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

builder.setOngoing(true);

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

致谢:Marian Klühspies(链接

于 2019-02-21T06:23:45.360 回答
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); 的活动。

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

于 2014-06-13T00:08:15.783 回答