Показывать только маленькую иконку в строке состояния без уведомления

Я хочу показать постоянную маленькую иконку в status bar , не показывая само notification лотке notification системы.

Я попытался использовать пользовательский layout и установить видимость корневого элемента в View.GONE или View.INVISIBLE , но для обоих система игнорирует его.

Я также пытался установить высоту корневого элемента, но система также игнорирует это.

Вот мой код:

R.layout.custom_notification :

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/custom_notification" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/notif_background" android:orientation="horizontal" android:baselineAligned="false"/> 

И код для отображения Notification :

  NotificationManager nm = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ctx); mBuilder .setSmallIcon(drawableId) .setAutoCancel(false) .setOngoing(true) .setPriority(Notification.PRIORITY_MAX); Intent resultIntent = new Intent(ctx, SettingsActivity.class); PendingIntent resultPendingIntent = PendingIntent.getActivity(ctx, 0, resultIntent, 0); mBuilder.setContentIntent(resultPendingIntent); int layout = R.layout.custom_notification ; RemoteViews contentView = new RemoteViews(ctx.getPackageName(), layout); contentView.setViewVisibility(R.id.custom_notification, View.INVISIBLE); mBuilder.setContent(contentView); nm.notify(NOTIFICATION_ID, mBuilder.build()); 

Я хорошо знаю, что для достижения моей цели мне не нужно документально оформленное решение. И я также знаю, что рекомендации UX настоятельно рекомендуют не делать этого. Поэтому нет смысла писать мне это как ответ.

Solutions Collecting From Web of "Показывать только маленькую иконку в строке состояния без уведомления"

Не рекомендуется показывать значок, не указывая на него какое-либо связанное уведомление. Согласно документам разработчиков,

Уведомление в строке состояния требует всех следующих действий:

  • Значок для строки состояния (который вас интересует)
  • Заголовок и расширенное сообщение для расширенного представления (если вы не определяете пользовательское расширенное представление)
  • PendingIntent, который будет запущен при нажатии на уведомление, чтобы отобразить соответствующую информацию.

Поэтому, если вы не хотите разрушать пользовательский опыт, очень рекомендуется следовать рекомендациям UX,

Логически: есть две части строки состояния – пользователь (уведомления) и система (другие). Если система позволяет поместить что-то в системную часть – будет столько бесполезных значков (размещенных другими приложениями), и не будет согласованности, и это может сломать весь опыт использования.

Найден ответ, который предоставляет вам способ доступа к значку строки состояния по умолчанию для Alarm, который он здесь . После Root your mobile вы можете это сделать. Есть несколько трюков на youtube, которые делают это. Некоторые ответы на эту же тему предлагают показать значок с помощью Notification, но поместить Notification Text пустым, чтобы пользователь видел только значок, но опять же это не так .

Это код для реализации строки состояния в системе, где описаны левая и правая значки (например, системные значки), вы можете получить оттуда некоторое преимущество. Ответ, который описывает это здесь .

Я бы посоветовал не использовать это приложение Google Play. Существует несколько причин:

  1. Если вы обнаружите ошибку, которая может помочь показать невидимое уведомление, это ничего не значит. Ошибка может работать только на частичном устройстве с конкретной версией Android. Помните: очень сложно правильно настроить ваш обычный код на большинстве устройств с использованием открытого API. Скрытый API не работает на всех устройствах.

    1. В исходном коде такого поведения нет: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/app/NotificationManager.java# NotificationManager.notify% 28int% 2Candroid.app.Notification% 29 . Вы ничего не можете найти с таким поведением.

    2. Для предсказуемого поведения используйте * Классы совместимости Android. То есть для уведомлений используется только класс NotificationCompat ! Только с оберткой может помочь вашему приложению показывать уведомления.

    3. Это очень уродливый UI / UX.

    4. Рабочий процесс уведомлений сильно зависит от версии Android.

Вы можете сделать это, используя InputMethodService.showStatusIcon () . Но я предлагаю вам отображать нормальное уведомление и объяснять пользователю, что делает ваше приложение прямо сейчас.

Вы можете использовать RemoteViews, чтобы скрыть заголовок и текст

R.id.notification_layout.xml:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_marginRight="10dp" android:layout_marginLeft="7dp" android:src="@drawable/icon_battery" /> </RelativeLayout>