android - programacion - ¿Barra de progreso en la barra de notificaciones al cargar la imagen?
no se muestra el progreso de descarga (6)
Me gustaría que mi aplicación cargue una imagen en un servidor web. Esa parte funciona.
Me pregunto si es posible mostrar de alguna manera el progreso de la carga ingresando una entrada en la "barra de notificaciones". Veo que la aplicación de Facebook hace esto.
Cuando tomas una foto y eliges subirla, la aplicación te permite continuar y, de alguna manera, coloca las notificaciones de carga de imágenes en una barra de progreso en la barra de notificaciones. Creo que eso es bastante astuto. Supongo que generan un nuevo servicio o algo para manejar la carga y la actualización de la barra de progreso en la barra de notificaciones de vez en cuando.
Gracias por cualquier idea
En Android, para mostrar una barra de progreso en una Notification , solo necesita inicializar setProgress (...) en Notification.Builder .
Tenga en cuenta que, en su caso, probablemente desee utilizar incluso el setOngoing(true) .
Integer notificationID = 100;
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//Set notification information:
Notification.Builder notificationBuilder = new Notification.Builder(getApplicationContext());
notificationBuilder.setOngoing(true)
.setContentTitle("Notification Content Title")
.setContentText("Notification Content Text")
.setProgress(100, 0, false);
//Send the notification:
Notification notification = notificationBuilder.build();
notificationManager.notify(notificationID, notification);
Entonces, su Servicio tendrá que notificar el progreso. Suponiendo que almacena su (porcentaje) de progreso en un Integer llamado progreso (por ejemplo, progress = 10 ):
//Update notification information:
notificationBuilder.setProgress(100, progress, false);
//Send the notification:
notification = notificationBuilder.build();
notificationManager.notify(notificationID, notification);
Puede encontrar más información en la página de notificaciones de API : http://developer.android.com/guide/topics/ui/notifiers/notifications.html#Progress
La clase pública loadVideo extiende AsyncTask {
int progress = 0;
Notification notification;
NotificationManager notificationManager;
int id = 10;
protected void onPreExecute() {
}
@Override
protected Void doInBackground(Void... params) {
HttpURLConnection conn = null;
DataOutputStream dos = null;
DataInputStream inStream = null;
String lineEnd = "/r/n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead;
int sentData = 0;
byte[] buffer;
String urlString = "http://xxxxx/xxx/xxxxxx.php";
try {
UUID uniqueKey = UUID.randomUUID();
fname = uniqueKey.toString();
Log.e("UNIQUE NAME", fname);
FileInputStream fileInputStream = new FileInputStream(new File(
selectedPath));
int length = fileInputStream.available();
URL url = new URL(urlString);
conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
dos = new DataOutputStream(conn.getOutputStream());
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=/"uploadedfile/";filename=/""
+ fname + "" + lineEnd);
dos.writeBytes(lineEnd);
buffer = new byte[8192];
bytesRead = 0;
while ((bytesRead = fileInputStream.read(buffer)) > 0) {
dos.write(buffer, 0, bytesRead);
sentData += bytesRead;
int progress = (int) ((sentData / (float) length) * 100);
publishProgress(progress);
}
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
Log.e("Debug", "File is written");
fileInputStream.close();
dos.flush();
dos.close();
} catch (MalformedURLException ex) {
Log.e("Debug", "error: " + ex.getMessage(), ex);
} catch (IOException ioe) {
Log.e("Debug", "error: " + ioe.getMessage(), ioe);
}
// ------------------ read the SERVER RESPONSE
try {
inStream = new DataInputStream(conn.getInputStream());
String str;
while ((str = inStream.readLine()) != null) {
Log.e("Debug", "Server Response " + str);
}
inStream.close();
} catch (IOException ioex) {
Log.e("Debug", "error: " + ioex.getMessage(), ioex);
}
return null;
}
@Override
protected void onProgressUpdate(Integer... progress) {
Intent intent = new Intent();
final PendingIntent pendingIntent = PendingIntent.getActivity(
getApplicationContext(), 0, intent, 0);
notification = new Notification(R.drawable.video_upload,
"Uploading file", System.currentTimeMillis());
notification.flags = notification.flags
| Notification.FLAG_ONGOING_EVENT;
notification.contentView = new RemoteViews(getApplicationContext()
.getPackageName(), R.layout.upload_progress_bar);
notification.contentIntent = pendingIntent;
notification.contentView.setImageViewResource(R.id.status_icon,
R.drawable.video_upload);
notification.contentView.setTextViewText(R.id.status_text,
"Uploading...");
notification.contentView.setProgressBar(R.id.progressBar1, 100,
progress[0], false);
getApplicationContext();
notificationManager = (NotificationManager) getApplicationContext()
.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(id, notification);
}
protected void onPostExecute(Void result) {
Notification notification = new Notification();
Intent intent1 = new Intent(MultiThreadActivity.this,
MultiThreadActivity.class);
final PendingIntent pendingIntent = PendingIntent.getActivity(
getApplicationContext(), 0, intent1, 0);
int icon = R.drawable.check_16; // icon from resources
CharSequence tickerText = "Video Uploaded Successfully"; // ticker-text
CharSequence contentTitle = getResources().getString(
R.string.app_name); // expanded message
// title
CharSequence contentText = "Video Uploaded Successfully"; // expanded
// message
long when = System.currentTimeMillis(); // notification time
Context context = getApplicationContext(); // application
// Context
notification = new Notification(icon, tickerText, when);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notification.setLatestEventInfo(context, contentTitle, contentText,
pendingIntent);
String notificationService = Context.NOTIFICATION_SERVICE;
notificationManager = (NotificationManager) context
.getSystemService(notificationService);
notificationManager.notify(id, notification);
}
}
verifica esto si te puede ayudar
No soy un usuario de Facebook, así que no sé exactamente lo que estás viendo.
Ciertamente, es posible seguir actualizando una Notification
, cambiando el icono para reflejar el progreso completado. Como sospecha, lo haría desde un Service
con un subproceso en segundo plano que administra la carga.
Puede diseñar una notificación personalizada, en lugar de solo la vista de notificación predeterminada del encabezado y subencabezado.
Lo que quieres esta here
Puedes probar esta clase te ayudará a generar notificaciones.
public class FileUploadNotification {
public static NotificationManager mNotificationManager;
static NotificationCompat.Builder builder;
static Context context;
static int NOTIFICATION_ID = 111;
static FileUploadNotification fileUploadNotification;
/*public static FileUploadNotification createInsance(Context context) {
if(fileUploadNotification == null)
fileUploadNotification = new FileUploadNotification(context);
return fileUploadNotification;
}*/
public FileUploadNotification(Context context) {
mNotificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
builder = new NotificationCompat.Builder(context);
builder.setContentTitle("start uploading...")
.setContentText("file name")
.setSmallIcon(android.R.drawable.stat_sys_upload)
.setProgress(100, 0, false)
.setAutoCancel(false);
}
public static void updateNotification(String percent, String fileName, String contentText) {
try {
builder.setContentText(contentText)
.setContentTitle(fileName)
//.setSmallIcon(android.R.drawable.stat_sys_download)
.setOngoing(true)
.setContentInfo(percent + "%")
.setProgress(100, Integer.parseInt(percent), false);
mNotificationManager.notify(NOTIFICATION_ID, builder.build());
if (Integer.parseInt(percent) == 100)
deleteNotification();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("Error...Notification.", e.getMessage() + ".....");
e.printStackTrace();
}
}
public static void failUploadNotification(/*int percentage, String fileName*/) {
Log.e("downloadsize", "failed notification...");
if (builder != null) {
/* if (percentage < 100) {*/
builder.setContentText("Uploading Failed")
//.setContentTitle(fileName)
.setSmallIcon(android.R.drawable.stat_sys_upload_done)
.setOngoing(false);
mNotificationManager.notify(NOTIFICATION_ID, builder.build());
/*} else {
mNotificationManager.cancel(NOTIFICATION_ID);
builder = null;
}*/
} else {
mNotificationManager.cancel(NOTIFICATION_ID);
}
}
public static void deleteNotification() {
mNotificationManager.cancel(NOTIFICATION_ID);
builder = null;
}
}
Usted this biblioteca y disfrute ..! Ver ejemplo para más detalles ...