2015-06-24 13 views
6

Chcę udostępnić element powiadomienia GCM. Przycisk udostępniania reaguje na zdarzenia kliknięcia, a element jest również udostępniany. Jedynym problemem jest to, że okno wyboru opcji Intent znajduje się pod tacą powiadomień. Użytkownik musi ręcznie zamknąć pasek stanu, a następnie wybrać aplikację do udostępniania. Chcę programowo zamknąć pasek stanu, aby po kliknięciu udostępnionego przez użytkownika pokazywał mu on bezpośrednio okno dialogowe, w którym można wybrać aplikacje.Jak programowo zamknąć tacę powiadomień

Zauważyłem, że usługa status bar może być używana do otwierania/zamykania usługi. Ale jest ograniczone do aplikacji systemowych.

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(); 
     } 

Użyłem powyższego kodu. Ale otrzymuję komunikat o błędzie "STATUS_BAR_SERVICE nie można rozwiązać". A kiedy dodałem poniżej permision w manifeście:

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

Dostaję, dozwolony tylko dla systemu apps.It nie jest pozwalając mi korzystać w mojej aplikacji. Czy istnieje sposób korzystania z usługi status bar lub jakiejkolwiek innej alternatywy?

Aktualizacja:

I rozwiązać powyższy problem z zaledwie 2 linii kodu. Nie ma potrzeby dzwonienia do STATUS_BAR_SERVICE.

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

Wywołanie tej intencji automatycznie zamyka powiadomienie

+2

I rozwiązać ten problem. Sprawdź aktualizację rozwiązania –

+0

, na której nie możesz polegać. co się dzieje, gdy otwarte jest rzeczywiste okno dialogowe na poziomie systemu? Miałem otwarte okno dialogowe na poziomie systemu, które zamknęło. –

Odpowiedz

0

Tak, to uprawnienie „android.permission.STATUS_BAR” jest dostępna tylko dla aplikacji systemowych, a nie do aplikacji firm trzecich.

Można spróbować poniżej metody:

  1. stworzyć jakiś zgłoszenie przekazując oczekiwaniu zamiar do niego.
  2. Utwórz oczekujące działanie z udostępnieniem jako czynnością. Teraz będziesz mógł korzystać z opcji udostępniania.

@Amanda Fernandez można spróbować powyżej metody

+0

Jeśli ustawię flagę FLAG_CANCEL_CURRENT na przycisk udostępniania oczekujący na itnet, wyczyści ona element z zasobnika. chcę, aby pozostała w zasobniku i powinna zostać wyczyszczona tylko wtedy, gdy użytkownik ją wybierze. –

Powiązane problemy