2011-09-16 1 views
19

Ho lavorato su notifiche push e sono in grado di implementarlo e visualizzarlo sulla barra di stato, il problema che sto affrontando è che voglio visualizzarlo anche se il telefono è bloccato Sotto la schermata di blocco dove dice ("trascina per sbloccare"), ho visto notifiche del genere ma non posso trovare alcun esempio.Android come mostrare la notifica sullo schermo

Esempio: Proprio come quando hai ricevuto una chiamata persa, lo mostrerà sotto il pulsante di blocco sullo schermo.

Codice:

String ns = Context.NOTIFICATION_SERVICE; 
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns); 
int icon = R.drawable.icon_launcher; 
CharSequence tickerText = "MyApplication"; 
long when = System.currentTimeMillis(); 
Notification notification = new Notification(icon, tickerText, when); 
notification.defaults |= Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE|Notification.DEFAULT_LIGHTS;; 
CharSequence contentTitle = this.title; 
CharSequence contentText = this.message; 
Intent notificationIntent = new Intent(this, MainActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
mNotificationManager.notify(NOTICE_ID, notification); 
+2

estranei, non è necessariamente bisogno di salvare tutto come variabili locali – CrackerJack9

+2

questo non è possibile in questo momento. –

+0

@Copa cosa intendi? Qual è il tuo riferimento?Ho diverse app che visualizzano le notifiche nel modo in cui l'OP descrive (barra di notifica, mentre lo schermo è bloccato). – CrackerJack9

risposta

3

Avete provato a generare l'alertdialog con una bandiera? Il flag_show_when_locked dovrebbe fare il trucco. Si prega di fare riferimento a questo thread, si dovrebbe trovare una risposta più dettagliata qui. Android Lock Screen Widget

11

Creare Notifica usando NotificationCompat.Builder

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_launcher) // notification icon 
      .setContentTitle("Notification!") // title for notification 
      .setContentText("Hello word") // message for notification 
      .setAutoCancel(true); // clear notification after click 
Intent intent = new Intent(this, MainActivity.class); 
PendingIntent pi = PendingIntent.getActivity(this,0,intent,Intent.FLAG_ACTIVITY_NEW_TASK); 
mBuilder.setContentIntent(pi); 
NotificationManager mNotificationManager = 
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
mNotificationManager.notify(0, mBuilder.build()); 

Push Notification sullo schermo bloccato http://www.hongkiat.com/blog/android-lock-screen-notifications/

+3

Questo non aiuta quando si tratta di mostrare effettivamente la notifica sulla schermata di blocco del dispositivo vero? –

+1

Sì, mostrerà la notifica anche se il dispositivo è bloccato – Naruto

+2

Lint dice il FLAG_ACTIVITY_NEW_TASK è incompatibile con PendingIntent – auval

2

Le notifiche che avete visto può effettivamente essere i widget posti su un lockscreen widget personalizzato host.

Se si guarda il codice sorgente della piattaforma Android per InstallWidgetReceiver il più tardi 4.4.3 qui:

https://android.googlesource.com/platform/packages/apps/Launcher3/+/master/src/com/android/launcher3/InstallWidgetReceiver.java

Vedrete questa nota dall'autore:

/** * Ci occuperemo probabilmente di questo aspetto più avanti, per consentire alle app esterne di posizionare i widget, ma per ora, * vogliamo solo esporre l'azione in giro per il controllo altrove. */

E si può vedere che InstallWidgetReceiver.java in realtà non concretizzati da Google nello stesso modo in cui è InstallShortCutReceiver.java. Quindi sembra almeno fino a 4.4.3 non puoi aggiungere widget alla schermata di blocco nativa nello stesso modo in cui puoi ad esempio aggiungere un collegamento alla schermata iniziale utilizzando InstallShortCutReceiver.

A meno che non si costruisca la propria app lockscreen come host di widget e l'utente si installi al posto del nativo, si può essere sfortunati utilizzando un widget.

Un altro approccio è tuttavia solo un'attività che imposta getWindow(). AddFlags (WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

Questo visualizzerà l'attività indipendentemente dal fatto che lo schermo sia bloccato o meno. Se si disattiva questa attività quando lo schermo è bloccato, verrà visualizzata la schermata di blocco.

2

Crea Notifica usando NotificationCompat.Builder ma assicuratevi di mettere visibilità al pubblico come

NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 
     builder 
     .setContentTitle("Title") 
     .setContentText("content") 
     .setSmallIcon(R.mipmap.ic_launcher) 
     .setVisibility(NotificationCompat.VISIBILITY_PUBLIC);//to show content in lock screen