2015-06-24 2 views
6

Я хочу поделиться элементом уведомления GCM. Кнопка совместного доступа отвечает на события кликов, а элемент получает общий доступ. Только проблема здесь, диалог выбора намерений присутствует ниже лотка уведомлений. Пользователь должен вручную закрыть строку состояния, а затем выбрать приложение для совместного использования. Я хочу закрыть панель состояния программно, так что, когда пользователь нажимает на общий доступ, он прямо показывает ему диалог для выбора приложений.Как программно закрыть лоток уведомлений

Я нашел, что услуга status bar может быть использована для открытия/закрытия услуги. Но он ограничен для системных приложений.

private void closeNotificationTray() { 
     Object service = mContext.getSystemService(Context.STATUS_BAR_SERVICE); 
     Method collapse; 
     try { 
      Class<?> statusBarMngr = Class.forName("android.app.StatusBarManager"); 
      if (Build.VERSION.SDK_INT >= 17) 
       collapse = statusBarMngr.getMethod("collapsePanels"); 
      else 
       collapse = statusBarMngr.getMethod("collapse"); 
      collapse.invoke(service); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (NoSuchMethodException e) { 
      e.printStackTrace(); 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 

Я использовал вышеуказанный код. Но я получаю сообщение «STATUS_BAR_SERVICE не может быть разрешено». И когда я добавил ниже permision в манифесте:

<uses-permission 
     android:name="android.permission.STATUS_BAR" /> 

Я получаю, допустима только для системы apps.It не позволяет мне использовать в своем приложении. Есть ли способ использовать услугу status bar или любую другую альтернативу?

Update:

Я решил выше вопрос только с 2 строк кода. Нет необходимости вызывать STATUS_BAR_SERVICE.

Intent it = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); 
    mContext.sendBroadcast(it); 

Вызов этого намерения будет автоматически закрывает уведомление о

+2

Я решил эту проблему. Проверьте обновление для решения –

+0

, на которое вы не можете положиться. что происходит, когда открывается диалоговое окно реального уровня системы? У меня был диалог уровня системы, и он закрыл его. –

ответ

0

Да, это разрешение «android.permission.STATUS_BAR» доступна только приложениям системы, а не сторонних приложений.

Вы можете попробовать ниже метод:

  1. Создать Некоторые уведомления, передавая ожидающий намерения в него.
  2. Создайте ожидающее намерение с акцией в качестве действия. Теперь вы сможете использовать опцию share.

@Amanda Fernandez вы можете попробовать выше метод

+0

Если я установил флаг FLAG_CANCEL_CURRENT на кнопку совместного доступа в ожидании itnet, он очистит элемент из лотка. я хочу, чтобы он остался в лотке, и его следует очистить, только когда пользователь его выбирает. –

Смежные вопросы