2010-04-22 33 views
18

Me gustaría poner una barra de progreso en la barra de notificaciones. La idea es mostrar la barra de progreso mientras el programa carga un archivo a un servidor. Todo lo demás está bien, pero no puedo descifrar cómo actualizar la barra de progreso dentro de la notificación. ¿Alguien sabe algún patrón para jugar? Quiero decir, dónde debería actualizar la barra de progreso, en un servicio o actividad y así.Actualizar la barra de progreso en la barra de notificaciones

+0

No sé si es posible. ¿Has probado con un gif animado? – Macarse

+0

Todavía no, pero necesito mostrar en tiempo real el progreso de la carga, así que de alguna manera tengo que actualizar la barra de progreso. Creo que usar un gif animado es válido si solo muestra un mensaje de "carga" más o menos. De todos modos, gracias por su tiempo. – ahmontero

+0

estoy seguro de que es posible. La aplicación Market muestra una barra de progreso al descargar e instalar aplicaciones en la barra de notificaciones ... – seanmonstar

Respuesta

15

no sé lo que su código es similar, por lo que no saben lo que hay que modificar, buti hizo un poco de búsqueda a través de la documentación. Encontré algunas cosas en Notifications, ProgressBars y RemoteViews.

Específicamente, en RemoveView, puede actualizar la barra de progreso. Así que la combinación de algunos de los ejemplos de código en cada enlace, me sale algo como esto:

public class MyActivity extends Activity { 
    private static final int PROGRESS = 0x1; 
    private static final int MAX_PROGRESS = 100; 

    private int mProgressStatus = 0; 

    private Handler mHandler = new Handler(); 

    protected void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     //define Notification 
     //... 

     RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification_layout); 
     contentView.setProgressBar(R.id.progress_bar, MAX_PROGRESS, mProgressStatus, false); 
     notification.contentView = contentView; 

     // Start file upload in a background thread 
     new Thread(new Runnable() { 
      public void run() { 
       while (mProgressStatus < MAX_PROGRESS) { 
        mProgressStatus = doWork(); 

        // Update the progress bar 
        mHandler.post(new Runnable() { 
         public void run() { 
          contentView.setProgressBar(R.id.progress_bar, MAX_PROGRESS, mProgressStatus, false); 
         } 
        }); 
       } 
      } 
     }).start(); 
    } 
} 
+2

¿tiene que tener una barra de progreso definida en su diseño xml personalizado? ¿O lo hará RemoteViews.setProgressBar()? El motivo por el que pregunto es porque http://developer.android.com/reference/android/widget/RemoteViews.html#setProgressBar(int, int, int, boolean) dicen "La id de la vista cuyo texto debería cambiar " – Pzanno

+0

@Pzanno - Me preguntaba exactamente lo mismo (por lo tanto, el +1). Descubrí que debe definir su propia barra de progreso en su diseño xml personalizado. – ArtOfWarfare

+0

buen ejemplo ... también estoy usando la barra de progreso en mi vista principal pero ... cuelga mi sistema no sé por qué ... todo va bien con la barra de progreso de notificación predeterminada –

0

Para eliminar un ProgressBar del RemoteView utilice el siguiente código: -

remoteViews.setViewVisibility(R.id.progressBar, View.INVISIBLE); 

También puede utilizar View.GONE pero eso hará que Android llene el espacio vacío.

Cuestiones relacionadas