Android API7 очищает текущее уведомление - PullRequest
0 голосов
/ 20 июля 2011

из моего сервиса я отправляю (с "постоянным" ID = 0) текущее уведомление, и кажется, что нет способа очистить его от кода.если я отправлю другие уведомления с тем же идентификатором (0), значок и намерения обновятся: /

Я не знаю, является ли это ошибкой в ​​API 7, но для меня это не имеет смысла.

когда я отправлял уведомление с Notification.FLAG_ONLY_ALERT_ONCE с другим идентификатором (например, 1), оно классифицировалось как простое уведомление, и я мог легко удалить его из расширенного меню или из кода.НО, просто отправив то же уведомление на предыдущий идентификатор (0), оно классифицируется как текущее, и я не могу отменить его в любом случае!

Я также пытался сохранить ссылку на «текущее» уведомление, а затем повторно уведомить его с другим PendingIntentи / или флаги, но это не имеет никакого эффекта!

мой текущий код службы

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    Log.d(TAG, "start notification");
    startStatusBarNotification();

    //do other stuff
    // We want this service to continue running until it is explicitly stopped, so return sticky.
    return START_STICKY;
}

private void startStatusBarNotification()
{
    Log.d(TAG, "startStatusBarNotification.");

    final int icon = R.drawable.stbar_icon_fail;
    final long when = System.currentTimeMillis();
    final Notification notification = new Notification(icon, getString(R.string.notify_title), when);

    final Intent notificationIntent = new Intent(this, MyActivity.class);
    notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    final PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);

    notification.setLatestEventInfo(this, getString(R.string.notify_title), expandText, contentIntent);
    notification.flags = Notification.FLAG_ONGOING_EVENT | Notification.FLAG_FOREGROUND_SERVICE;//| Notification.FLAG_NO_CLEAR

    Log.d(TAG, "notify send.");
    final NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(SERVICE_ONGOING_NOTIFICATION_ID, notification);//ID = 0
}

@Override
public void onDestroy()
{
    Log.d(TAG, "clear status bar notification.");
    cancelNotification();

    super.onDestroy();
}

private void cancelNotification()
{
    final int icon = R.drawable.stbar_icon_exit;
    final long when = System.currentTimeMillis();
    final Notification notification = new Notification(icon, getString(R.string.notify_title), when);
    final PendingIntent contentIntent = PendingIntent.getActivity(this, 0, null, PendingIntent.FLAG_CANCEL_CURRENT);
    notification.setLatestEventInfo(this, getString(R.string.notify_stopping_title), getString(R.string.notify_stopping_text), contentIntent);
    notification.flags = Notification.FLAG_AUTO_CANCEL;

    final NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.cancel(SERVICE_ONGOING_NOTIFICATION_ID);  //NOTHING HAPPENS
    mNotificationManager.notify(SERVICE_ONGOING_NOTIFICATION_ID, notification);   //ID = 0 but if this was changed to 1 cancel notification can be cleared :/
}

Я вижу значок выхода, поэтому вызываются onDestroy и cancelNotification, я понятия не имею, чтоя делаю неправильно

1 Ответ

1 голос
/ 20 июля 2011

Не похоже, что вы можете успешно отменить текущие уведомления с идентификатором 0: вам, вероятно, придется использовать ненулевой идентификатор уведомления.

Код службы основного менеджера уведомлений - здесь , который, как представляется, не имеет конкретных ограничений на выбор идентификатора уведомления, но все остальные, кто использует уведомления ONGOING (например, приложение «Телефон»), используют ненулевые идентификаторы.

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