2012-01-03 8 views
5

Voglio creare una notifica personalizzata con una barra di avanzamento e un pulsante di cancellazione.Notifica personalizzata Android 4.0 come la musica di google

Screenshot:

enter image description here

riesco a creare una notifica personalizzata con una barra di avanzamento, ma non sono riuscito a creare l'evento di eliminazione. Voglio annullare la notifica e interrompere il caricamento una volta che l'utente ha fatto clic sulla "x" (come in Google Music, quindi non desidero avviare un'attività per cancellare la notifica).

Ecco il mio codice di lavoro:

notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE); 

    int icon = R.drawable.ic_launcher; 
    CharSequence tickerText = "Hello"; 
    long when = System.currentTimeMillis(); 

    notification = new Notification(icon, tickerText, when);  


    CharSequence contentTitle = "My notification"; 
    CharSequence contentText = "Hello World!"; 
    Intent notificationIntent = new Intent(context, UploadEventsReceiver.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 

    notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
    notification.contentView = new RemoteViews(context.getPackageName(), R.layout.upload_progress); 
    notification.contentView.setOnClickPendingIntent(R.id.text, contentIntent); 

    notificationManager.notify(this.notificationId, notification); 

Nella riga

Intent notificationIntent = new Intent(context, UploadEventsReceiver.class); 

ho provato con un ricevitore BroadCast senza "broadcasting", ma non so se è il modo giusto per farlo e non sono riuscito a farlo funzionare. Cosa dovrei usare e come usarlo?

+0

Nizza, ero sul punto di attuare ciò che ho appena trovato nel tuo screenshot: pulito alterna di controllo hardware, per esempio per WiFi, rotazione o modalità aereo. Stai utilizzando una ROM personalizzata o l'hai trovata sul Market? Grazie per il tuo aiuto e buona fortuna per il tuo progetto. – stfn

risposta

5

Non sono sicuro di come sia stato realizzato in Google Music, ma puoi impostare onClickListener per qualsiasi visualizzazione nel layout passato a RemoteViews. Basta fare in questo modo:

RemoteViews remoteViews = new RemoteViews(widgetPackage, R.layout.widget); 
Intent action = new Intent(context, Your_cancel_broadcast.class); 
action.setAction(CANCEL_BROADCAST_ACTION); 
actionPendingIntent = PendingIntent.getBroadcast(context, 0, action, 0); 
remoteViews.setOnClickPendingIntent(R.id.your_x_btn, actionPendingIntent); 

e creare broadcast, che riceve CANCEL_BROADCAST_ACTION e si ferma ciò che si vuole, e annullare tale notifica.

+0

L'intenzione verrà trasmessa? O l'intenzione sarà inviata solo al mio cancel_broadcast? – Quanturium

+0

Dipende dal valore di "CANCEL_BROADCAST_ACTION" - se è personalizzato (smth come "lalala") - solo la tua trasmissione riceverà questo intento – Jin35

0

Inoltre, penso (secondo la documentazione) che il tuo metodo è deprecato.

Si dovrebbe usare STH come:

Notification.Builder builder = new Notification.Builder(context); 
builder.setContentTitle("Your notification title"); 
builder.setContentText("Your notification text"); 
builder.setSmallIcon(R.drawable.ic_your_icon); 
builder.setContentIntent(yourIntent); 
notificationManager.notify(null, YOUR_UNIQUE_NOTIFICATION_ID, builder.getNotification()); 

http://developer.android.com/reference/android/app/NotificationManager.html

http://developer.android.com/reference/android/app/Notification.Builder.html

+1

Nota: Notification.Builder è disponibile solo in API 11+. La libreria di supporto v4 ha NotificationBuilderCompat, ma in base al seguente link attualmente manca il suo metodo setProgress. http://code.google.com/p/android/issues/detail?id=30755 i – MaximumGoat

Problemi correlati