Отключить очистку уведомления для моего приложения - PullRequest
9 голосов
/ 06 августа 2011

Мне нужно написать приложение, которое будет работать в фоновом режиме. Это приложение будет запущено из автозапуска и не будет никакого стартового интерфейса. Gui можно звонить с клика по уведомлению, которое будет отображаться при автозапуске. Я переживал, что, когда пользователь удалял уведомления, он терял возможность вызывать этот графический интерфейс. У меня вопрос, есть ли способ заблокировать очистку моего уведомления пользователем?

Ответы [ 5 ]

21 голосов
/ 12 февраля 2014

Вот уведомление, которое не позволит пользователю очистить его.

Notification notification = new NotificationCompat.Builder(this)
        .setTicker(r.getString(R.string.app_name))
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle(r.getString(R.string.app_name))
        .setAutoCancel(false)
        .setOngoing(true)
        .build();

Вызов setOngoing(true) достигает этого, и setAutoCancel(false) предотвращает исчезновение уведомления, когда пользователь нажимает на уведомление.

Уведомление будет сброшено, если приложение будет удалено или с помощью функции Отмена или ОтменаВсе: http://developer.android.com/reference/android/app/NotificationManager.html#cancel(int)

3 голосов
/ 06 августа 2011

Возможно, вы захотите узнать, как сделать уведомление в «запущенном» разделе уведомлений.Эти уведомления не очищаются, когда пользователь очищает их.

Используйте Notification.FLAG_NO_CLEAR AND Notification.FLAG_ONGOING_EVENT .Это должно дать вам эффект, который вы хотите

0 голосов
/ 10 марта 2018

Просто добавьте эти два флага к уведомлению, FLAG_AUTO_CANCEL запретите автоматическое прекращение уведомления при касании пользователя и FLAG_ONGOING_EVENT сделайте его постоянным уведомлением .

notification.flags=Notification.FLAG_AUTO_CANCEL|Notification.FLAG_ONGOING_EVENT;
0 голосов
/ 14 апреля 2015

Хотя ответ @cja может быть правильным, хотя ему не хватает нескольких строк кода (Уведомление не будет отображаться или не будет отображаться на панели уведомлений).

Это полная рабочая функция:

public void createNotification() {
    NotificationCompat.Builder notification = new NotificationCompat.Builder(this);

    notification.setTicker( "Ticker Text" );
    notification.setSmallIcon(R.drawable.ic_launcher);
    notification.setContentTitle( "Content Title" );
    notification.setContentText( "Content Text" );
    notification.setAutoCancel( false );
    notification.setOngoing( true );
    notification.setNumber( ++NotificationCount );

    Intent intent = new Intent(this, MainActivity.class);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0);
    notification.setContentIntent(pIntent);

    notification.build();  

    NotificationManager nManger = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    nManger.notify(NotificationID, notification.build()); 
}

NotificationID is int служит идентификатором вашего уведомления.

, вы можете очистить его, используя это:*

убедитесь, что notification.setAutoCancel( false ); установлен на false , поэтому он не будет очищен при нажатии кнопки очистки или при наличии жеста смахивания.

несколько строк кодов изначально@cja пост.

ура / счастливое кодирование ...

0 голосов
/ 06 августа 2011

Вы хотите реализовать Foreground Service .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...