Android, как показать уведомление на экране - PullRequest
27 голосов
/ 16 сентября 2011

Я работаю над push-уведомлениями, и я могу реализовать их и отобразить в строке состояния, проблема, с которой я сталкиваюсь, заключается в том, что я хочу отобразить его, даже если телефон заблокирован. говорит ("перетащить, чтобы разблокировать"), я видел подобные уведомления, но не могу найти никакого примера к этому.

Пример: Так же, как когда вы получили пропущенный вызов, он будет отображаться под кнопкой блокировки на вашем экране.

Код:

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 ]

15 голосов
/ 14 марта 2013

Создание уведомления с помощью 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());

Push-уведомление на заблокированном экране http://www.hongkiat.com/blog/android-lock-screen-notifications/

5 голосов
/ 13 июня 2012

Вы пробовали создать алертиалдиалог с флагом? Flag_show_when_locked должен сделать свое дело. Пожалуйста, обратитесь к этой теме, вы должны найти более подробный ответ здесь. Виджет блокировки экрана Android

3 голосов
/ 11 декабря 2016

Создайте уведомление с помощью 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
2 голосов
/ 13 июня 2014

Уведомления, которые вы видели, на самом деле могут быть виджетами, размещенными на пользовательском экране блокировки хоста виджетов.

Если вы посмотрите исходный код платформы Android для InstallWidgetReceiver, начиная с версии 4.4.3, здесь:

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

Вы увидите это примечание автора:

/ ** * Мы, вероятно, уточним это позже, чтобы разрешить внешним приложениям размещать виджеты, нона данный момент, * мы просто хотим выставить действие для проверки в другом месте.* /

И вы можете видеть, что InstallWidgetReceiver.java на самом деле не реализован Google так же, как InstallShortCutReceiver.java.Таким образом, кажется, что по крайней мере до 4.4.3 вы не можете добавить виджеты на собственный экран блокировки так же, как вы можете, например, добавить ярлык на домашний экран с помощью InstallShortCutReceiver.

Если вы не создадите свое собственное приложение для блокировки экрана в качестве хоста виджета, а пользователь установит вместо нативного, вам может не повезти с использованием виджета.

Однако другой подход заключается в том, чтобы просто намдействие, которое устанавливает getWindow (). addFlags (WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

Это будет отображать вашу активность независимо от того, заблокирован экран или нет.Отключение этого действия при заблокированном экране приведет к отображению заблокированного экрана.

0 голосов
/ 21 февраля 2019

Я исправил это, добавив эту строку в конструктор уведомлений

builder.setOngoing(true);

Это также сделает уведомление не отменяемым пользователем, но решит проблему.

Кредиты для: Marian Klühspies ( ссылка )

...