2015-06-24 26 views
6

Desidero condividere l'elemento di notifica GCM. Il pulsante di condivisione risponde agli eventi di clic e anche l'elemento viene condiviso. L'unico problema qui è, la finestra di dialogo di selezione Intenti è presente sotto la barra delle notifiche. L'utente deve chiudere manualmente la barra di stato e quindi selezionare l'app per la condivisione. Voglio chiudere la barra di stato a livello di codice, in modo che quando l'utente fa clic sulla condivisione, gli mostri direttamente la finestra di dialogo per scegliere le app.Come chiudere a livello di programmazione il vassoio di notifica

Ho trovato che il servizio status bar può essere utilizzato per aprire/chiudere il servizio. Ma è limitato per le app di sistema.

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

Ho utilizzato il codice precedente. Ma ricevo l'errore "STATUS_BAR_SERVICE non può essere risolto". E quando ho aggiunto il permision seguito nel manifesto:

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

sto ottenendo, ammesso solo per il sistema di apps.It Non è che mi permette di usare nella mia app. C'è un modo per utilizzare il servizio status bar o qualsiasi altra alternativa?

Aggiornamento:

Ho risolto il problema precedente con solo 2 righe di codice. Non è necessario chiamare STATUS_BAR_SERVICE.

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

chiamata a questo intento sarà chiude automaticamente la notifica

+2

ho risolto questo problema. Si prega di verificare l'aggiornamento per la soluzione –

+0

non è possibile fare affidamento sul proprio aggiornamento. cosa succede quando è aperta una finestra di dialogo a livello di sistema? Ho aperto una finestra di dialogo a livello di sistema e l'ho chiusa. –

risposta

0

Sì, questa autorizzazione "android.permission.STATUS_BAR" è disponibile solo per le applicazioni di sistema, non applicazioni di terze parti.

Si può provare di seguito il metodo:

  1. creare qualche notifica passando intenti in attesa in esso.
  2. Creare l'intento in sospeso con condivisione come azione. Ora sarà possibile utilizzare l'opzione di condivisione.

@Amanda Fernandez si può provare sopra metodo

+0

Se ho impostato il flag FLAG_CANCEL_CURRENT sul pulsante di condivisione in attesa di itnet, cancellerà l'elemento dal vassoio. Voglio che rimanga nel vassoio e dovrebbe essere cancellato solo quando l'utente lo seleziona. –