Как закрыть раскрывающийся список уведомлений в Android ›= 3.0 из пользовательского расширенного уведомления с дополнительной кнопкой?

Я успешно создал пользовательское расширенное уведомление для Android >= 3.0, которое показывает некоторый текст и дополнительную кнопку. Если щелкнуть уведомление в любом месте, кроме кнопки в раскрывающемся списке уведомлений, уведомление будет отклонено, раскрывающийся список закрыт, а указанное намерение запустится, как и ожидалось. Если выделенная кнопка в уведомлении нажата, другой Intent успешно запускается, но раскрывающийся список остается открытым (и уведомление все еще там, но я отменяю его позже, это не проблема). Intent запускает действие, которое появляется за раскрывающимся списком уведомлений.

Чего я хотел бы добиться, так это сохранить все текущее поведение, как описано, но также закрыть раскрывающийся список уведомлений из Intent, который запускает кнопка - возможно ли это? В качестве альтернативы было бы достаточно, если бы Activity из кнопки Intent получил фокус окна.

Вот код пользовательского уведомления, если это поможет:

            Notification.Builder builder = new Notification.Builder(main)
                .setSmallIcon(R.drawable.notification)
                .setAutoCancel(true)
                .setTicker(text)
                .setContentIntent(...);

            RemoteViews layout = new RemoteViews(
                    main.getPackageName(), R.layout.notification);
            layout.setTextViewText(R.id.title, title);
            layout.setTextViewText(R.id.text, text);
            Intent i = new Intent(
                    "snooze", null, main, Snooze.class
            );
            i.putExtra(KEY_WIDGET_ID, widgetId);
            layout.setOnClickPendingIntent(R.id.notification_zzz, PendingIntent.getActivity( main, 0, i, PendingIntent.FLAG_UPDATE_CURRENT ));
            builder.setContent(layout);

            ...
            NotificationManager nm = 
                (NotificationManager)main.getSystemService(Context.NOTIFICATION_SERVICE);
            nm.notify(0, builder.getNotification());

person mdiener    schedule 14.01.2012    source источник


Ответы (1)


Задал вопрос в рабочие часы Android-разработчика: http://www.youtube.com/watch?v=XvLBvdml_Fs (вопрос с 49:10)

Ответ был, что это невозможно, и я даже не должен этого делать, в чем я сомневаюсь. Вот почему я создал запрос функции: http://code.google.com/p/android/issues/detail?id=24762

РЕДАКТИРОВАТЬ 08-10-12: Начиная с Android 4.1 это возможно, так как уведомления теперь могут включать дополнительные действия. Дополнительные сведения см. на следующей странице: https://developer.android.com/about/versions/android-4.1.html#UI

person mdiener    schedule 26.01.2012
comment
Для Android 3.0 до 4.0 я не нашел решения. Но как упоминалось выше для Android 4.1 и выше есть встроенный механизм дополнительных действий, который также закрывал бы выпадающее меню, и это то, что я использую. Более подробную информацию можно найти здесь: developer.android.com/guide /topics/ui/notifiers/ - person mdiener; 28.01.2013