Android如何在屏幕上显示通知
Posted
技术标签:
【中文标题】Android如何在屏幕上显示通知【英文标题】:Android how to show notification on screen 【发布时间】:2011-11-18 13:13:45 【问题描述】:我一直在研究推送通知,我能够实现它并将其显示在状态栏上,我面临的问题是即使手机被锁定,我也想显示它,在它的锁定屏幕下说(“拖动解锁”),我见过这样的通知,但找不到任何例子。
示例: 就像您接到未接电话一样,它会显示在屏幕上的锁定按钮下方。
代码:
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);
【问题讨论】:
不相关的,不一定要全部保存为局部变量 目前不可能。 @Copa 你是什么意思?你的参考是什么?我有几个应用程序以 OP 描述的方式显示通知(通知栏,屏幕锁定时)。 目前无法在锁屏上显示通知、小部件或其他内容。如果您使用的是自定义锁屏,这可以工作 - 但不需要。自定义锁屏是一个普通的应用程序,这就是它起作用的原因。但是android本身的原始锁屏无法更改。我没有官方链接,谷歌告诉你为什么这个dosent工作,但目前没有API来完成这项工作。 @Copa:Handcent SMS 设法在锁定屏幕顶部显示一个对话框。我不知道怎么... 【参考方案1】:使用 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/
【讨论】:
这对于在设备的锁定屏幕上实际显示通知没有帮助吗? 是的,即使设备被锁定,它也会显示通知 Lint 说 FLAG_ACTIVITY_NEW_TASK 与 PendingIntent 不兼容 R.mipmap.ic_launcher【参考方案2】:使用 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
【讨论】:
builder 已弃用【参考方案3】:您是否尝试过使用标志创建警报对话框? flag_show_when_locked 应该可以解决问题。 请参考这个帖子,你应该在这里找到更详细的答案。 Android Lock Screen Widget
【讨论】:
【参考方案4】:我通过将此行添加到通知生成器来解决此问题
builder.setOngoing(true);
它也会使用户无法取消通知,但它解决了问题。
致谢:Marian Klühspies (link)
【讨论】:
【参考方案5】:您看到的通知实际上可能是放置在自定义小部件主机锁屏上的小部件。
如果您在此处查看 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);
无论屏幕是否锁定,这都会显示您的活动。屏幕锁定时关闭此活动将显示锁定屏幕。
【讨论】:
以上是关于Android如何在屏幕上显示通知的主要内容,如果未能解决你的问题,请参考以下文章