Android에서 알림을 지우는 방법


96

프로그래밍 방식으로 알림을 지울 수 있습니까?

나는 그것을 시도했지만 NotificationManager작동하지 않습니다. 내가 할 수있는 다른 방법이 있습니까?


12
자신의 통지가 아닌 다른 사람의 취소 할 수 있습니다
DONAL 래퍼 티를

1
예 코드 조각에 대해 Donal과 동의합니다. androidtrainningcenter.blogspot.in/2013/04/…
Tofeeq Ahmad

API> = 18에 대한 다른 알림을 지우는 방법은이 답변을 참조하십시오.- stackoverflow.com
25693210/1073832

답변:


227

알림을 취소하려면 다음 코드를 사용하십시오.

NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);

이 코드에는 항상 알림에 사용되는 동일한 ID가 있습니다. 취소해야하는 다른 알림이있는 경우 알림을 만드는 데 사용한 ID를 저장해야합니다.


9
왜 이것이 더 이상 찬성되지 않고 답변으로 선택되지 않았는지 모르겠습니다. 이것이 제가 찾고 있던 해결책이었습니다. 감사!
loeschg

3
여기서 알림 ID는 무엇입니까?
Deepak 2015

이것은 실제로 작동합니다. 그러나 알림을 취소 setContentText하면 우선 순위를 2로 설정했지만 모든 후속 알림에 알림 메시지 텍스트 (을 사용하여 설정 )가 표시되지 않습니다 . 제안 사항이 있습니까?
Iqbal

작동하지 않는 경우 Notification.FLAG_NO_CLEAR로 알림 플래그를 설정
아난드 Savjani

2
모두를 위해 그리고 어떤 ID를 모르는 경우, if (notificationManager! = null) {notificationManager.cancelAll (); }
mehmet

42

출처 : http://developer.android.com/guide/topics/ui/notifiers/notifications.html

사용자가 알림 창에서 선택할 때 상태 표시 줄 알림을 지우려면 알림 개체에 "FLAG_AUTO_CANCEL"플래그를 추가합니다. cancel (int)을 사용하여 수동으로 지우거나 알림 ID를 전달하거나 cancelAll ()을 사용하여 모든 알림을 지울 수도 있습니다.

하지만 Donal이 맞습니다. 생성 한 알림 만 지울 수 있습니다.


11
이것은 프로그램 적으로 알림을 취소하지 않습니다.
Janusz

4
확실하지 야누 얘기하지만 취소 (ID)와 확실히 작업 cancelAll () 무엇
앤드류 G

32

아무도 이것에 대한 코드 답변을 게시하지 않았기 때문에 :

notification.flags = Notification.FLAG_AUTO_CANCEL;

.. 이미 플래그가있는 경우 다음과 같이 OR FLAG_AUTO_CANCEL 할 수 있습니다.

notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;

4
이 방법이 더 좋습니다.notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
Sebastian Nowak

왜 그렇게 더 좋은지 설명 할 수 있습니까?
Prof

@Prof 동일한 목적을위한 코드가 적고 성능에 영향을 미치지 않습니다.
Denny

1
@Denny 이것은 첫 번째 알림 플래그가 위에 정의되어 있으므로 한 줄 대신 두 줄이라고 가정합니다
Prof

20

NotificationManager에 제공된 기본 방법을 시도하십시오 .

NotificationManager.cancelAll()모든 알림을 제거합니다. NotificationManager.cancel(notificationId)특정 알림을 제거합니다.


1
경우에는 사람이 노 티피 케이션은 가지고 있지에 붙어지고 cancel방법은 cancel당신의 인스턴스가 필요하므로 방법은 정적되지 않습니다 NotificationManager:이 등이 NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);그런 다음 호출 할 수 있습니다 notificationManager.cancel(notificationId);그의 대답에서 참조 Rohit Suthar처럼. notificationId당신이에 전달 된 ID 단순히notificationManager.notify(notificationId, mNotification)
Mira_Cole

8

API 레벨 18 (Jellybean MR2)부터는 NotificationListenerService를 통해 자신이 아닌 다른 알림을 취소 할 수 있습니다.

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public class MyNotificationListenerService extends NotificationListenerService {...}

...

private void clearNotificationExample(StatusBarNotification sbn) {
    myNotificationListenerService.cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}

5
 Notification mNotification = new Notification.Builder(this)

                .setContentTitle("A message from: " + fromUser)
                .setContentText(msg)
                .setAutoCancel(true)
                .setSmallIcon(R.drawable.app_icon)
                .setContentIntent(pIntent)
                .build();

.setAutoCancel (true)

알림을 클릭하면 해당 활동을 열고 알림 표시 줄에서 알림을 제거합니다.


4

다음을 사용하여 포 그라운드에서 시작된 서비스에서 알림을 생성하는 경우

startForeground(NOTIFICATION_ID, notificationBuilder.build());

그런 다음 발행

notificationManager.cancel(NOTIFICATION_ID);

알림이 취소되지 않고 알림이 상태 표시 줄에 계속 나타납니다. 이 특별한 경우에는 다음을 발행해야합니다.

stopForeground( true );

서비스 내에서 다시 백그라운드 모드로 전환하고 동시에 알림을 취소합니다. 또는 알림을 취소하지 않고 백그라운드로 푸시 한 다음 알림을 취소 할 수 있습니다.

stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);

3

NotificationCompat.Builder(의 일부 android.support.v4)를 사용 하는 경우 객체의 메서드를 호출하기 만하면됩니다.setAutoCancel

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setAutoCancel(true);

어떤 사람들은 setAutoCancel()그들에게 효과가 없다고 보고 했으므로이 방법으로 시도해보십시오.

builder.getNotification().flags |= Notification.FLAG_AUTO_CANCEL;

참고 이 방법이 getNotification()사용되지 않습니다 !


질문은 프로그래밍 방식으로 지우는 방법을 물었습니다. setAutoCancel ()은 사용자가 알림을 클릭하면이를 지 웁니다. developer.android.com/reference/android/support/v4/app/…
S Fitz

@SFitz 그가 원하는 것이 무엇인지 질문에서 명확하지 않습니다. 사용자가 클릭하면 알림을 지우고 싶어한다는 것을 이해했습니다.
sandalone 2015-08-05

1
    // Get a notification builder that's compatible with platform versions
    // >= 4
    NotificationCompat.Builder builder = new NotificationCompat.Builder(
            this);
    builder.setSound(soundUri);
    builder.setAutoCancel(true);

알림 작성기를 사용하는 경우 작동합니다.



1

실제로 API 레벨 18로 시작하기 전에 답변 한대로 NotificationListenerService를 사용하여 다른 앱에서 게시 한 알림을 취소 할 수 있지만 해당 접근 방식은 Lollipop에서 더 이상 작동하지 않습니다. 여기에 Lillipop API를 포함하는 알림을 제거하는 방법이 있습니다.

if (Build.VERSION.SDK_INT < 21) {
    cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
    cancelNotification(sbn.getKey());
}

방법을 찾을 수 없습니다 cancelNotification.
Denny

그것은 NotificationListenerService 클래스의 방법이다, 공식 문서 확인하시기 바랍니다 developer.android.com/reference/android/service/notification/...
알레한드로 카사노바

서비스 외부에서 어떻게 사용할 수 있습니까?
Denny

0

NotificationListenerService 구현에 언급 된대로 'NotificationListenerService'를 수신하여 모든 알림 (다른 앱 알림 포함)을 제거 할 수 있습니다.

서비스에서 당신은 전화해야합니다 cancelAllNotifications().

다음을 통해 애플리케이션에 대해 서비스를 활성화해야합니다.

'앱 및 알림'-> '특별 앱 액세스'-> '알림 액세스'.


0

이 코드는 나를 위해 일했습니다.

public class ExampleReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);

    int notificationId = 1;
    notificationManager.cancel(notificationId);
  }
}

0

나는 AndroidX 및 이전 버전과의 호환성에 대해 가장 최근업데이트 되었다고 생각합니다 . 이를 수행하는 가장 좋은 방법 (Kotlin 및 Java)은 다음과 같이 수행해야합니다.

NotificationManagerCompat.from(context).cancel(NOTIFICATION_ID)

또는 모든 알림을 취소하는 방법은 다음과 같습니다.

NotificationManagerCompat.from(context).cancelAll()

AndroidX 또는 지원 라이브러리 용으로 제작되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.