Android, как показать уведомление на экране

Я работаю над 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);

Ответ 1

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

Ответ 2

Создать уведомление с помощью 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 Notification на заблокированном экране http://www.hongkiat.com/blog/android-lock-screen-notifications/

Ответ 3

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

Если вы посмотрите на исходный код платформы 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.

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

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

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

Ответ 4

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