2013-06-28 2 views
0

Я запускающее деятельность с использованием уведомленияAndroid ICS строке состояния не скрывая при щелчке уведомления

final Intent intent = new Intent(context, TestActivity.class); 
     intent.setAction(Intent.ACTION_VIEW); 
PendingIntent launcher = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
     views.setOnClickPendingIntent(R.id.test_launch_btn, launcher); 

Если активность не видна, и я нажимаю на уведомление он работает нормально. Проблема заключается в том, что в ICS, если активность уже видна, и я нажимаю из строки состояния уведомления, она не продвигается по клику уведомления, тогда как в строке состояния Jellybean слайд вверх по щелчку. Строка состояния не сворачивается при щелчке по уведомлению в ICS. Что можно сделать, чтобы скрыть строку состояния при щелчке уведомления. Я использую S3, работающий 4.0.4.

+0

В случае ICS я думаю, что это не вызов метода collapse класса StatusBarManager. Кто-нибудь знает, когда он вызывается инфраструктурой. – anujprashar

+0

В журнале я вижу, что система пытается запустить активность 06-28 13: 21: 49.522: I/ActivityManager (533): START {act = android.intent.action.VIEW flg = 0x10000000 cmp = com.example.test /. TestActivity bnds = [0,432] [172,604]} из pid -1. Но он не запускается. – anujprashar

ответ

4

Вы правы, Honeycomb и ICS автоматически не закрывают панель уведомлений при нажатии кнопки внутри, чтобы запустить Activity. (В то время у нас не было способа определить, какие кнопки вашего уведомления будут запускать Activity, и мы не можем перехватить этот щелчок соответственно. Было бы нецелесообразно закрывать панель на любым нажатием кнопки, потому что это сделало бы такие вещи, как музыкальные контроллеры, действительно неприятными.)

Вот что вы можете сделать: на HC + ICS, как только ваша активность была запущена таким образом, вы можете широковещать Intent.ACTION_CLOSE_SYSTEM_DIALOGS, чтобы явно закрыть панель уведомлений. Только делайте это только на устройствах Pre-Jelly Bean, и только если ваша активность была запущена в ответ на ваш PendingIntent вашего собственного уведомления.

Обратите внимание, что это единственный способ закрыть панель на Jelly Bean, если кнопки вашего уведомления используют трансляции, вместо запуска действий.

+0

Спасибо, что ответили. Я закрываю строку состояния, вызывая метод через отражение для устройств ICS. \t \t \t \t Object service = getSystemService ("statusbar"); \t \t \t \t Класс statusbarManager = Class.forName ("android.app.StatusBarManager"); \t \t \t \t Метод collapse = statusbarManager.getMethod ("collapse"); \t collapse.setAccessible (true); \t collapse.invoke (услуга); – anujprashar

+0

Просто используйте трансляцию; вам не нужно будет полагаться на размышления о методах, которые не проверяются CTS и поэтому не гарантируются на всех устройствах Android. – dsandler