프로그래밍 방식으로 알림을 지울 수 있습니까?
나는 그것을 시도했지만 NotificationManager
작동하지 않습니다. 내가 할 수있는 다른 방법이 있습니까?
프로그래밍 방식으로 알림을 지울 수 있습니까?
나는 그것을 시도했지만 NotificationManager
작동하지 않습니다. 내가 할 수있는 다른 방법이 있습니까?
답변:
알림을 취소하려면 다음 코드를 사용하십시오.
NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(NOTIFICATION_ID);
이 코드에는 항상 알림에 사용되는 동일한 ID가 있습니다. 취소해야하는 다른 알림이있는 경우 알림을 만드는 데 사용한 ID를 저장해야합니다.
setContentText
하면 우선 순위를 2로 설정했지만 모든 후속 알림에 알림 메시지 텍스트 (을 사용하여 설정 )가 표시되지 않습니다 . 제안 사항이 있습니까?
출처 : http://developer.android.com/guide/topics/ui/notifiers/notifications.html
사용자가 알림 창에서 선택할 때 상태 표시 줄 알림을 지우려면 알림 개체에 "FLAG_AUTO_CANCEL"플래그를 추가합니다. cancel (int)을 사용하여 수동으로 지우거나 알림 ID를 전달하거나 cancelAll ()을 사용하여 모든 알림을 지울 수도 있습니다.
하지만 Donal이 맞습니다. 생성 한 알림 만 지울 수 있습니다.
아무도 이것에 대한 코드 답변을 게시하지 않았기 때문에 :
notification.flags = Notification.FLAG_AUTO_CANCEL;
.. 이미 플래그가있는 경우 다음과 같이 OR FLAG_AUTO_CANCEL 할 수 있습니다.
notification.flags = Notification.FLAG_INSISTENT | Notification.FLAG_AUTO_CANCEL;
notifcation.flags |= Notification.FLAG_AUTO_CANCEL;
NotificationManager에 제공된 기본 방법을 시도하십시오 .
NotificationManager.cancelAll()
모든 알림을 제거합니다.
NotificationManager.cancel(notificationId)
특정 알림을 제거합니다.
cancel
방법은 cancel
당신의 인스턴스가 필요하므로 방법은 정적되지 않습니다 NotificationManager
:이 등이 NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
그런 다음 호출 할 수 있습니다 notificationManager.cancel(notificationId);
그의 대답에서 참조 Rohit Suthar처럼. notificationId
당신이에 전달 된 ID 단순히notificationManager.notify(notificationId, mNotification)
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());
}
다음을 사용하여 포 그라운드에서 시작된 서비스에서 알림을 생성하는 경우
startForeground(NOTIFICATION_ID, notificationBuilder.build());
그런 다음 발행
notificationManager.cancel(NOTIFICATION_ID);
알림이 취소되지 않고 알림이 상태 표시 줄에 계속 나타납니다. 이 특별한 경우에는 다음을 발행해야합니다.
stopForeground( true );
서비스 내에서 다시 백그라운드 모드로 전환하고 동시에 알림을 취소합니다. 또는 알림을 취소하지 않고 백그라운드로 푸시 한 다음 알림을 취소 할 수 있습니다.
stopForeground( false );
notificationManager.cancel(NOTIFICATION_ID);
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()
사용되지 않습니다 !
// Get a notification builder that's compatible with platform versions
// >= 4
NotificationCompat.Builder builder = new NotificationCompat.Builder(
this);
builder.setSound(soundUri);
builder.setAutoCancel(true);
알림 작성기를 사용하는 경우 작동합니다.
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager Nmang = (NotificationManager) getApplicationContext()
.getSystemService(ns);
Nmang .cancel(getIntent().getExtras().getInt("notificationID"));
더 많은 참조를 원하시면 여기를 클릭하십시오 http://androiddhina.blogspot.in/2015/01/how-to-clear-notification-in-android.html
실제로 API 레벨 18로 시작하기 전에 답변 한대로 NotificationListenerService를 사용하여 다른 앱에서 게시 한 알림을 취소 할 수 있지만 해당 접근 방식은 Lollipop에서 더 이상 작동하지 않습니다. 여기에 Lillipop API를 포함하는 알림을 제거하는 방법이 있습니다.
if (Build.VERSION.SDK_INT < 21) {
cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId());
}
else {
cancelNotification(sbn.getKey());
}
cancelNotification
.
NotificationListenerService 구현에 언급 된대로 'NotificationListenerService'를 수신하여 모든 알림 (다른 앱 알림 포함)을 제거 할 수 있습니다.
서비스에서 당신은 전화해야합니다 cancelAllNotifications()
.
다음을 통해 애플리케이션에 대해 서비스를 활성화해야합니다.
'앱 및 알림'-> '특별 앱 액세스'-> '알림 액세스'.
이 코드는 나를 위해 일했습니다.
public class ExampleReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
int notificationId = 1;
notificationManager.cancel(notificationId);
}
}